회신: unit 82.4 아카이브 파일 오류
, 도장_ 관리자님이 작성캡처한 archive.bin 파일을 보면 hello.txt 파일 정보는 기록되었지만, hello.txt의 내용은 기록되지 않았습니다. 따라서 파일 데이터를 기록하는 부분을 봐야 합니다.
Unit 82.4의 예제에서 append 함수에는 다음 부분이 있습니다.
// 파일 데이터의 시작 위치는 현재 파일 포인터의 위치에 // 파일 정보 크기만큼 순방향으로 이동시킨 값 desc->dataOffset = ftell(archive->fp) + sizeof(FILE_DESC); // 아카이브 파일에 새 파일 정보 쓰기 if (fwrite(desc, sizeof(FILE_DESC), 1, archive->fp) < 1) { printf("파일 정보 쓰기 실패\n"); ret = -1; goto Error2; // fp를 닫고, desc와 buffer를 해제하는 에러 처리로 이동 } // 아카이브 파일에 새 파일 데이터 쓰기 if (fwrite(buffer, size, 1, archive->fp) < 1) { printf("파일 데이터 쓰기 실패\n"); ret = -1; goto Error2; // fp를 닫고, desc와 buffer를 해제하는 에러 처리로 이동 } printf("%s 파일 추가 성공\n크기: %d\n", filename, size);강조된 부분의 코드가 누락되어 있습니다.
작성한 예제 코드는 다음과 같습니다.
if (fwrite(desc, sizeof(FILE_DESC), 1, archive->fp) < 1)
{
printf("파일 데이터 쓰기 실패\n");
ret = -1;
goto Error2;
}
fwrite에서 파일 정보를 기록할 때는 sizeof(FILE_DESC) 크기만큼 기록하고, 파일 데이터를 기록할 때는 해당 파일의 size 크기만큼 기록합니다.
sizeof(FILE_DESC)를 기록할 때는 printf의 에러 메시지도 "파일 정보 쓰기 실패"로 바꿔야 합니다.
fwrite는 총 2번 호출됩니다. 1번은 파일 정보, 1번은 파일 내용입니다. 문의한 코드는 파일 정보는 기록하지만, 파일 내용은 기록하지 않았습니다.
예제에서 코드가 비슷한 부분이니 주의해서 비교해주세요.