2009-02-03 4 views
3

Есть ли встроенный метод для ожидания создания файла в C#? Как насчет того, чтобы файл был полностью написан?Ожидание файла, который будет создан в C#

Я испек свой собственный, неоднократно пытаясь File.OpenRead() в файле до тех пор, пока он не удастся (и не завершится тайм-аут), но вращение в файле не похоже на правильную работу. Я предполагаю, что в .NET есть метод запекания в .NET, но я не могу его найти.

ответ

10

Как насчет использования компонента FileSystemWatcher?

Этот класс «наблюдает» за данным каталогом или файлом и может создавать события, когда что-то (вы можете определить, что) произошло.

+1

Просто осторожность с FileSystemWatcher - я обнаружил, что FileSystemWatcher может произойти сбой при попытке использовать его с приводом, установленным в сети, где соединение является отслаиваться. По сути, когда соединение было потеряно и восстановлено, наблюдатель больше не распознал изменения. Только мои два цента. – itsmatt

+0

Он также не работает с Novell Networks по крайней мере 1.1 не – JoshBerke

1

FileSystemWatcher может уведомлять вас о том, когда файл создан, удален, обновлен, изменен атрибут и т. Д. Он решит вашу первую проблему ожидания для ее создания.

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

1

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

Есть ли альтернатива, чтобы мы могли быть уверены, что мы не открываем файл, прежде чем он будет полностью записан на диск и закрыт?

+0

Метод «немой, но работает», который я использовал (по сетевым путям), - это поставить thread.sleep() в цикле, который контролирует размер. Проверьте файл. Если не существует, то все равно спящий, если существует, тогда проверьте размер и снова сон. Если в следующий раз размер будет таким же, то закройте, если нет, снова спящий. Я смотрю файлы 15-20 Мб и спал в течение 5 минут между ..., что слишком много, но поскольку это ночь, так что это не влияет. Это не очень умно, но пока не сработало. – BlueChippy

3

При создании файла с File.Create вы можете просто вызвать функцию Close. Как это:

File.Create(savePath).Close(); 
Смежные вопросы