Является ли DirectoryInfo.LastWriteTime безопасным способом проверки того, что файл все еще не загружается? - PullRequest
0 голосов
/ 15 марта 2011

Безопасно ли использовать что-то подобное, чтобы гарантировать, что каталог в данный момент не записывается?

Dim ImportDir As New DirectoryInfo("C:\MyPath\")
If DateDiff(DateInterval.Minute, ImportDir.LastWriteTime, Now) < 10 Then
    Exit Sub
End If

Я обрабатываю изображения размером до 10 МБ, поэтому моя главная проблема в том, что я не уверен, обновляется ли свойство LastWriteTime (которое предположительно ссылается на метаданные «последнего изменения» файловой системы), когда первый, последний или каждый байт файла записывается на диск.

Файлы обычно загружаются через FTP IIS7 в файловую систему NTFS на сервере Windows 2008. Если это зависит от файловой системы, было бы также полезно узнать, какие файловые системы обновляются, когда.

РЕДАКТИРОВАТЬ: Я надеялся, что это может быть использовано для упрощения программы, обеспечивая одновременную обработку всего каталога. В конце концов я решил переосмыслить это, так как обходные пути являются более грязными и менее надежными, чем тот, который я пытался избежать! Приветствия за ответы, хотя

Ответы [ 3 ]

2 голосов
/ 15 марта 2011

Совсем нет.LastWriteTime обновляется после записи, а не во время записи.Вам нужно полагаться на то, какая программа выполняет загрузку, чтобы установить блокировку файла.Любой приличный делает.Таким образом, попытка открыть файл, скажем, с помощью конструктора FileStream с помощью FileShare.Read или FileShare.None вызовет IOException.Это почти всегда будет работать.

2 голосов
/ 15 марта 2011

Я не совсем уверен, насколько точным будет ваш метод.Однако альтернативным решением будет попытка открыть файл в монопольном режиме (FileShare.None) в рамках try-catch, например

Dim fs As FileStream = File.Open(path, FileMode.Open, FileAccess.Write, FileShare.None);

(очевидно, поместите его в try-catch)

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

1 голос
/ 15 марта 2011

Хороший ответ вы найдете при проверке, доступен ли файл здесь: Как проверить блокировку файла? , поскольку это обычная проблема.

...