Добавлен дополнительный символ в буфер при записи в файл в C - PullRequest
0 голосов
/ 24 октября 2010

mПри попытке сделать резервную копию файла в C я обнаружил, что дополнительные символы иногда генерируются алгоритмом ниже. Я также попытался объявить readBuffer в цикле while , но это не решило проблему. Вот пример проблемы.

Исходное содержимое файла

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 ]

6 голосов
/ 24 октября 2010

Try: write (fdWrite, readBuffer, bytesRead ).

1 голос
/ 24 октября 2010

Попробуйте изменить BUFFER_SIZE на bytesRead в вызове функции записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...