이것은 내 첫 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()
을 잘못 사용하고 있습니까?
"단지 출력이 손상되었습니다"란 의미는 무엇입니까? – immibis
왜 C++ 클래스 대신에 C++ 프로그램에서'stdio' 함수를 사용하고 있습니까? – Barmar
@immibis 파일을 실행하지 마십시오. 그것이해야하는 크기가 없습니다. 나는 그것이라고 생각한다. – Xabirau