【问题标题】:fseek() causing an overlap in the datafseek() 导致数据重叠
【发布时间】:2011-06-11 21:48:35
【问题描述】:

我正在使用 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;
}

【问题讨论】:

    标签: c fseek


    【解决方案1】:

    我猜您是在 Windows 上,并且正遭受 Windows 文本模式的弊端。将"b" 添加到您传递给fopen 的标志中,即

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

    【讨论】:

      【解决方案2】:

      您似乎正在阅读Dest 文件

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

      并写入源代码

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

      可能,您必须将Dest 更改为Src

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        相关资源
        最近更新 更多