Как я могу узнать, когда файл был недавно перезаписан в папке FTP? - PullRequest
0 голосов
/ 08 мая 2009

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 08 мая 2009

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

РЕДАКТИРОВАТЬ: На вопрос Джозефа о том, что вот статический метод, который я держу в своем классе утилит только для таких случаев:

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

Тогда я просто некоторое время (! FileComplete (foo)) {} до фактической обработки файла.

0 голосов
/ 08 мая 2009

Взгляните на FileSystemWatcher .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...