在C中写入文件时,额外字符添加到缓冲区

时间:2010-10-24 02:19:22

标签: c file buffer

m尝试在C中制作文件的备份副本时,我发现下面的算法有时会产生额外的字符。我也尝试在 while 循环中声明readBuffer,但这并没有解决问题。以下是该问题的一个示例。

原始文件内容

Hello there. 
My name is Alice. 
Done.

备份文件内容

Hello there. 
My name is Alice.
Done.ice

正如您所看到的,在之前缓冲的消息的最后一行中还剩下一些字符。这只发生在文件的最后几行,因为任何其他时间缓冲区都填充了新内容。我的下面的逻辑怎么能得到纠正才能解决这个问题?

while(0 != bytesRead)
{      
    bytesRead = read(fdRead,readBuffer, BUFFER_SIZE);      
    if(0>bytesRead)
    {
      fprintf(stderr,"read() on '%s' for backup failed.\nError Info: %s\n",fileName,strerror(errno));
      exit(EXIT_FAILURE);
    }
    else if(0<bytesRead)
    {
      if(-1 == write(fdWrite,readBuffer,BUFFER_SIZE))
        {
          fprintf(stderr,"An error occurred while writing backup for '%s'.\nError Info: %s\n",fileName,strerror(errno));
          exit(EXIT_FAILURE);
        }
    }
}

2 个答案:

答案 0 :(得分:6)

尝试:write(fdWrite,readBuffer, bytesRead )。

答案 1 :(得分:1)

尝试在写函数调用中将BUFFER_SIZE更改为bytesRead。