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);
}
}
}
答案 0 :(得分:6)
尝试:write(fdWrite,readBuffer, bytesRead )。
答案 1 :(得分:1)
尝试在写函数调用中将BUFFER_SIZE更改为bytesRead。