Операции с файловой системой (например, копирование, удаление, перемещение), выполняемые через ActiveSync, являются ли они атомарными? - PullRequest
0 голосов
/ 06 марта 2012

Я разрабатываю приложение в .NET Compact Framework 3.5 для Windows CE 6. Мне нужно автоматизировать некоторую синхронизацию данных между мобильным приложением и ПК.Итак, что я делаю, так это то, что в приложении .NETCF у меня есть цикл while, который проверяет каждые несколько секунд, используя System.IO.File.Exists (fullFilePath), был ли ожидаемый файл скопирован с ПК намобильное устройство через соединение ActiveSync.

Как только мобильное приложение найдет файл, оно откроет и прочитает его с помощью StreamReader.

Моя проблема в том, что иногда File.Exists (fullFilePath) вернул бы значение true, однако последующее использование StreamReader может завершиться с ошибкой FileNotFoundException.

Исключение возможности удаления файла между вызовом File.Exists () и созданием StreamReaderКто-нибудь знает, как может возникнуть исключение?Это потому, что копирование файла через ActiveSync не является атомарным, так что файл фактически не готов для чтения, даже если File.Exists () возвращает true?

1 Ответ

1 голос
/ 06 марта 2012

Копия файла, скорее всего, , а не будет атомарной. Когда вы запускаете копию, файл создается, но в нем нет данных. Когда данные файла записываются, файл «существует», но еще не полностью завершен. Вы бы хотели знать не только о том, что он существует, но и о том, что он в данный момент не используется (имеется в виду, что автор уже готов) Попытка открыть его исключительно проверит это.

...