Каталог. Проблема задержки CreateDirectory?

Я пытаюсь создать удаленный каталог и затем записать файл в него. Каждое великое время от времени, приложение перестало работать с Системой. IO.DirectoryNotFoundException при попытке записать файл.

Когда я пишу файл, я использую возвращенный объект DirectoryInfo помочь создать путь к файлу, таким образом, приложение, кажется, думает, что каталог был создан. Однако каталог не существует.

Есть ли шанс, что я пытаюсь записать в каталог, прежде чем Windows закончил создавать его? Я думал бы что Каталог. CreateDirectory не возвратился бы, пока эта задача не была закончена.

10
задан majorpayne27 8 February 2010 в 23:09
поделиться

2 ответа

Ответ - Да. Поведение, когда создание файла/директории происходит с задержкой. Обычным решением, как предлагает другой комментатор, является использование повторных попыток с некоторым таймаутом. Поведение одинаково независимо от того, какие файловые функции используются: Findfirst, CreateFile, WaitForSingleObject и др.

Другим решением будет использование новых транзакционных функций API, найденных на Vista и более поздних ОС Windows.

Проблема неприятна и никогда не была понятна разработчикам файлоемких проектов, сделанных на других платформах и перенесенных в Windows: например, DOS/CMD скрипты, SVN-клиенты, Cygwin, perl, различные java-приложения, различные инсталляторы и т.д.

8
ответ дан 3 December 2019 в 20:41
поделиться

Хотя я никогда не сталкивался с таким поведением и не могу его объяснить, прагматичным решением является настройка цикла вокруг вызова, обращающегося к каталогу. Поймать DirectoryNotFoundException внутри этого цикла, и повторить попытку доступа несколько раз после короткой паузы каждый раз. Перебросьте исключение, если счетчик повторных попыток превышен.

Добавление подробной записи в журнал в этот момент может помочь определить фактическую причину проблемы.

4
ответ дан 3 December 2019 в 20:41
поделиться