2016-12-12 2 views
-3

이것은 내 첫 approuch이고 fread()fwrite() 기능입니다. 그래서 나는 그들과 어떻게 대처할 수 있는지 배우고있다. 텍스트 파일의 경우 성공적으로 a를 읽고 다른 함수에서 파일을 만들었습니다. 그러나 텍스트가 아닌 파일로 시도 할 때마다 출력이 손상됩니다. 나는 인터넷을 통해이 문제를 검색하는 결과가 없기 때문에 여기에서 묻습니다.비 텍스트 파일을 올바르게 fread() 및 fwrite()하는 방법은 무엇입니까?

요약하면 서버에서 클라이언트로 연 파일에서 데이터를 수집하고 클라이언트가 데이터를 구문 분석하여 정확한 파일을 만들려고합니다.

그래서, 제가이 일을 오전 방법을 설명하자 :

FILE* myfile = fopen(fullPath.c_str(), "rb"); 

가 그럼 난 파일을 읽어하는 루프를 만들 : 를 내가 바이너리 모드에서 비 텍스트 파일을 엽니 다 (나는 '어떤 이유 비 텍스트 파일의 실제 크기) size/4 같다는 것을 발견했습니다 부패 문제는 버퍼의 내 변환에있는 경우는 내가 확실하지 않다 (클라이언트에서 sucessfuly 문자열을 구문 분석하고 지금

int readPos = 0; 
std::string externalBuffer; 

while (true) { 
    unsigned char buffer[1024]; 
    int bytesRead = 0; 

    bytesRead += fread(buffer, sizeof(unsigned char), 1024, upfile);  

    if (bytesRead == 0) 
     break; 

    externalBuffer = unsigned_char_to_string(buffer, bytesRead); //This simple function loops over the buff and converts each entry to the string -> the results are numbers from 0-255 

//Here I convert the buffer to a string and send it to the client to be parsed and add to a string buffer like: dataChunk += parsedString; 

//clear buffers 

} 

문자열로). 루프의 모든 데이터가 전송 된 후. 클라이언트는 버퍼 dataChunk를 사용하여 다음 쓰려고 :

FILE* myfile = fopen(fullPath.c_str(), "wb+"); 
fwrite(dataChunk.c_str(), sizeof(char), dataChunk.size(), myfile); 
fclose(myfile); 

이미 16 진수로 255에서 각 항목을 변환하여 새 파일을 작성, 16 진수 문자열로 전송되는 데이터를 변환하려고했습니다. 또한 dataChunk 문자열을 unsigned char 배열로 변환하려고 시도했습니다. 하지만 내 모든 시도로 인해 파일이 손상되었습니다. 이 방법을 사용하여 실행 파일과 PNG 이미지를 만들려고했습니다. 그 다음에 fopen이라는 몇 가지 예제를 살펴본 후 모든 파일을 한 번에 복사 한 다음 동일한 기능의 새 파일에서 fwrite을 사용하여 서명 된 char을 사용하는 것처럼 보입니다.

이 코드의 문제점과 왜 완벽한 파일을 출력하지 않는 이유는 무엇입니까? fread()fwrite()을 잘못 사용하고 있습니까?

+0

"단지 출력이 손상되었습니다"란 의미는 무엇입니까? – immibis

+1

왜 C++ 클래스 대신에 C++ 프로그램에서'stdio' 함수를 사용하고 있습니까? – Barmar

+0

@immibis 파일을 실행하지 마십시오. 그것이해야하는 크기가 없습니다. 나는 그것이라고 생각한다. – Xabirau

답변

0

@Barmar 수정.

std::string externalBuffer(&buffer[0], &buffer[0] + bytesRead); 

을하고 완벽하게 일 : 이 코드에 unsigned_char_to_string 기능을 변경!

@Barmar! noobish되는 것에 대해 유감스럽게 생각한다 :) 당신은 나의 날을 만들었다!

관련 문제