0

fseek関数とfread関数を使用してファイルの指定されたチャンクを読み取り、それを別のファイルに書き込みます。何らかの理由で、宛先ファイルに書き込まれたすべてのチャンク間で約20バイトのオーバーラップが発生します。

誰か、このゴミの出所を特定するのを手伝ってくれませんか?これは間違いなく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;
}
4

2 に答える 2

2

あなたはWindowsを使用していて、Windowsのテキストモードの悪に苦しんでいると思います。渡す"b"フラグに追加します。fopen

pSrcFile = fopen ( "test.txt" , "rb" );
pDstFile = fopen ( "result1.txt", "a+b");
于 2011-06-11T21:59:27.157 に答える
0

Destファイルから読んでいるようです

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

ソースへの書き込み

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

おそらく、に変更Destする必要がありますSrc

于 2011-06-12T07:15:56.050 に答える