Что случилось, если CFile :: Write выдает исключение? - PullRequest
1 голос
/ 01 декабря 2008

Предположим, что операция записи создает исключение на полпути. Есть ли какие-либо данные, записанные в файл, или нет данных, записанных в файл?

Ответы [ 2 ]

1 голос
/ 01 декабря 2008

Поскольку у вас нет представления о внутренностях CFile (или нет, если он правильно инкапсулирован), вам нужно полагаться на «контракт» API. Другими словами, если документация не говорит вам конкретно, что происходит в определенных случаях, вы не можете на это полагаться.

Даже если у вас есть исходный код и вы можете его выяснить, спецификация API является контрактом, и все, что там не указано, может измениться в любое время. Это одна из причин, по которой некоторые разработчики программного обеспечения опасаются публиковать внутренние компоненты, так как тогда можно увидеть, что они могут навсегда поддерживать их.

Если вы действительно хотите убедиться, что ваш файл будет находиться в известном состоянии после исключения, вам придется кодировать поведение. Это может быть что-то вроде:

  • резервное копирование файла при запуске программы (просто); или
  • резервное копирование перед каждой операцией сохранения (все еще относительно просто); или
  • резервное копирование перед любой операцией записи (сложной и медленной).
0 голосов
/ 01 декабря 2008

Краткий ответ: Скорее всего, некоторые данные будут записаны в файл, если только диск не заполнится в начале операции записи.

Более длинный ответ: это будет зависеть от того, что CFileException выбрасывается из вызова Write.

http://msdn.microsoft.com/en-us/library/as5cs056(VS.80).aspx

...