2011-06-11 4 views
0

fseek 및 fread 함수를 사용하여 지정된 파일 청크를 읽고 다른 파일에 쓰는 중입니다. 어떤 이유로 목적지 파일에서 약 20 바이트가 겹쳐집니다.fseek()는 데이터에 겹침을 초래합니다.

아무에게도,이 쓰레기의 출처를 식별하는 데 도움이 될 수 있습니까? 확실히 fseek 함수로 인해 발생하지만, 그 이유는 알 수 없습니다.

FILE *pSrcFile; 
FILE *pDstFile; 

int main() 
{ 
int buff[512], i; 
long bytesRead; 

pSrcFile = fopen ("test.txt" , "r"); 
pDstFile = fopen ("result1.txt", "a+"); 

for(i = 0; i < 5; i++) 
{ 
    bytesRead = _readFile (&i, buff, 512); 
    _writeFile(&i, buff, bytesRead); 
} 

fclose (pSrcFile); 
fclose (pDstFile); 
} 

int _readFile (void* chunkNumber, void* Dstc, long len) 
{ 
int bytesRead; 
long offset = (512) * (*(int*)chunkNumber); 

fseek(pSrcFile, offset, SEEK_SET); 

bytesRead = fread (Dstc , 1, len, pSrcFile); 

return bytesRead; 
} 

int _writeFile (void* chunkNumber, void const * Src, long len) 
{ 
int bytesWritten; 
long offset = (512) * (*(int*)chunkNumber); 

bytesWritten = fwrite(Src , 1 , len , pDstFile); 

return bytesWritten; 
} 

답변

2

나는 Windows에서 텍스트 모드의 악조건으로 고통 받고 있다고 생각합니다. 당신은 그것은 당신이 Dest 파일

bytesRead = fread (Dstc , 1, len, pSrcFile); 

에서 읽기 및 소스 아마

bytesWritten = fwrite(Src , 1 , len , pDstFile); 

에 작성하는 것 즉, fopen

pSrcFile = fopen ("test.txt" , "rb"); 
pDstFile = fopen ("result1.txt", "a+b"); 
0

을 플래그에 "b" 추가를 통과, 당신은 변경해야 Dest ~ Src.

관련 문제