Проверьте, завершена ли запись в файл - PullRequest
2 голосов
/ 26 февраля 2010

Я сейчас пишу плагин на C ++. Для моей функциональности я прошу API сохранить файл. API дает мне возвращаемое значение, когда файл написан ... или так казалось. Проблема в том, что это возвращаемое значение возвращается слишком рано, поэтому я не могу быть уверен, что файл записан полностью.

Есть ли возможность проверки полноты записи файла независимо от API?

Ответы [ 4 ]

4 голосов
/ 26 февраля 2010

Это потому, что система не записывает данные на диск, как только они запрашиваются, но все равно возвращается. В C вы можете использовать int fflush (FILE *stream), но я не знаю, как вы это сделаете в C ++.

1 голос
/ 26 февраля 2010

Не совсем, даже если мы перечитаем файл, чтобы «проверить», что запись была произведена, вы все равно можете посмотреть на буфер ядра.

0 голосов
/ 26 февраля 2010

Как уже упоминалось, вы можете использовать fflush (). Вы можете вызвать sync () / fsync () в зависимости от того, используете ли вы потоковый класс или дескриптор.

0 голосов
/ 26 февраля 2010

Вы можете сравнить исходный буфер и файл, который вы записали в байт, для байта, но я думаю, что лучше доверить вашей операционной системе соответствующие операции fflush и fclose.

...