2009-05-08 2 views
0

Я пишу Службу Windows, которая должна взять файл из папки FTP на локальном компьютере и проанализировать данные в этом файле и нажать на внешний источник. Файл будет загружен в папку FTP в какой-то момент от какой-либо другой стороны, и я не могу предсказать, когда файл будет загружен. Мне нужна служба, чтобы иметь возможность сканировать FTP-папку и узнавать, когда файл был недавно загружен на сервер, и начать процесс синтаксического анализа.Как узнать, когда файл был недавно перезаписан внутри папки FTP?

Мне нужно знать, есть ли какой-нибудь способ в .NET, чтобы определить, когда файл был помещен в каталог.

Существует аналогичный вопрос в SO об этом here, но это было не в отношении написания службы Windows. Кроме того, решение, казалось, состояло в том, чтобы контролировать сам каталог, но я тестировал эту идею с использованием класса DirectoryInfo, и она не работает при просмотре свойства LastWriteTime. При копировании и замене файла в каталоге время каталога не изменяется.

Примечание: Я не могу полагаться на временные метки создания/изменения файла, поскольку я не знаю, как другая сторона генерирует эти файлы.

ответ

3

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

EDIT: На вопрос Иосифа о том, как, вот статический метод я держу в моем классе утилит для таких случаев: (! FileComplete (Foo))

 
public static bool FileComplete(string filePath) 
     { 
      try 
      { 
       File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None); 
       return true; 
      } 
      catch { return false; } 
     } 

Тогда я просто Хотя {} до моего фактическая обработка файлов.

+0

Спасибо AllenG, но как бы я разобрался, если файл полностью написан? Получил ли я это из класса FileInfo? – Joseph

+0

То, как я делаю это, - это попытаться открыть файл с помощью FileSharing.None, чтобы проверить, все ли попытки ftp-транзакции записать в файл. Как только вы сможете открыть его таким образом, вам должно быть хорошо идти. Может быть, лучший способ, но если так, я не знаю. – AllenG

Смежные вопросы