C # найти, когда файл был загружен на FTP - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть задание, которое один раз в определенные промежутки времени «смотрит» на FTP, если загружены какие-то новые файлы.Как только это находит, это загружает это.Вопрос в том, как использовать C # для извлечения времени, когда файл был фактически загружен на FTP.

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

fileInfo = session.GetFileInfo(FileFullPath);
dateUploaded = fileInfo.LastWriteTime;  

Посоветуйте пример кода, который может быть интегрирован в мое текущее решение

using (Session session = new Session())
 {
    string FileFullPath = 
        Dts.Variables["User::FTP_FileFullPath"].Value.ToString();                                               
    session.Open(sessionOptions);                                                                   
    DateTime dateTime = DateTime.Now;                                                              
    session.MoveFile(FileFullPath, newFTPFullPath);                          
    TransferOperationResult transferResult;
    transferResult = session.GetFiles(newFTPFullPath,                                 
        Dts.Variables["User::Local_DownloadFolder"].Value.ToString(),false);                                    
    Dts.Variables["User::FTP_FileProcessDate"].Value = dateTime; 
}      

1 Ответ

0 голосов
/ 07 декабря 2018

Вы не сможете этого сделать, если только вы не знаете, что FTP-сервер надежно устанавливает дату создания / изменения файла на дату, когда он был загружен.Сделайте несколько тестовых загрузок и посмотрите.Если это работает для вас на этом конкретном сервере, который вы хотите использовать, то отлично;Записывайте, когда вы в последний раз посещали, и извлекайте файлы с большей датой.Например, тестовая загрузка на ftp-сервер Azure (возможно, полученная из Microsoft IIS) действительно установила время файла на дату и время его загрузки.Помните, что указанное файловое время, отправленное сервером, может отличаться от часового пояса, в котором вы находитесь, и не будет отображаться какая-либо информация о часовом поясе - это может быть просто некоторое количество часов по сравнению с вашим текущим временем

Чтобы получить саму дату, вам нужно проанализировать ответ, который сервер выдает вам при перечислении удаленного каталога.Если вы используете библиотеку FTP для C # (правка: вы используете WinSCP) , это может быть уже обработано для вас (правка: это так, см. https://winscp.net/eng/docs/library_session_listdirectory иhttps://winscp.net/eng/docs/library_remotefileinfo);, если в последнее время ситуация не улучшилась, положение FTP по умолчанию в .NET невелико - оно больше предназначено для базового извлечения файлов, чем для сложной синхронизации, поэтому я определенно остановлюсь на использовании подходящей библиотеки (и мы не будемне делайте программных записей здесь, извините, поэтому я не могу порекомендовать один), если вы внимательно изучаете информацию о дате, предлагаемую

Тем не менее, есть другой способ выполнить этот процесс синхронизации, который является скорее побочным эффектомвсего, что вы хотите сделать (и не обязательно полагаться на анализ нестандартного вывода списка) в целом как процесс:

Сохраняйте память каждого файла, который вы видели в прошлый раз, и обращайтесь к нему при просмотре каждого файлаэто там сейчас. Это на самом деле довольно легко сделать:

  • Загрузить все файлы.
  • Отключить.
  • Вернитесь через некоторое время и загрузите любые файлычто тыУ вас уже нет
  • Следите за тем, какие файлы вы скачали и что-то с ними делаете?

Вы говорите, что хотите их скачать в любом случае, так что просто обработайте любой файл, который у вас нет.у него уже есть (или, может быть, тот, который имеет более новую дату, другой размер файла и т. д.) как новый / измененный с тех пор, как вы в последний раз смотрели

Большая работа, потенциально в зависимости от того, сколько различных серверов вы хотите поддерживать

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