#c# #asp.net #ftp #monitoring #fluentftp
#c# #asp.net #ftp #мониторинг #fluentftp
Вопрос:
Я использую приведенный ниже код. (FluentFTP) но элемент.При изменении будет указана только дата создания файла. Таким образом, его рендеринг основан на дате создания скопированного файла. (Не при копировании) Как я буду получать файлы на основе даты копирования / добавления в Fluent FTP.
private static void GetFiles()
{
using (FtpClient conn = new FtpClient())
{
string ftpPath = "ftp://myftp/";
Dictionary<string, string> dirList = new Dictionary<string, string>();
DateTime lastRunDate = DateTime.Now.AddMinutes(-2);
string downloadFileName = @"C:tempFTPTest";
string newID = Guid.NewGuid().ToString();
downloadFileName = newID "\";
conn.Host = ftpPath;
//conn.Credentials = new NetworkCredential("ftptest", "ftptest");
conn.Connect();
//Get all directories
foreach (FtpListItem item in conn.GetListing(conn.GetWorkingDirectory(),
FtpListOption.Modify | FtpListOption.Recursive))
{
// if this is a file
if (item.Type == FtpFileSystemObjectType.File)
{
if (item.Modified >= lastRunDate)
{
dirList.Add(item.FullName, item.Modified.ToString());
conn.DownloadFile(downloadFileName item.FullName, item.FullName);
}
}
}
}
}
Комментарии:
1. Я не уверен, что понимаю разницу между двумя датами. Можете ли вы где-нибудь увидеть интересующую вас дату? Как в любом FTP-клиенте с графическим интерфейсом?
2. здесь доступны только две даты 1. Создано, 2. Изменено -> Создано, всегда отображается формат 01-01-0001, вот почему я использовал измененный..
3. Доступно ГДЕ ?
4. FtpListItem item -> элемент. Изменен и элемент. Созданный доступен
5. Но это не то, о чем я вас спрашивал. Я спрашиваю вас, можете ли вы увидеть значение , которое вас интересует, где угодно.
Ответ №1:
Объяснение:
Я загружаю файлы с FTP (требуется разрешение на чтение) с той же структурой папок. Таким образом, при каждом запуске задания я могу проверять по физическому пути, существует тот же файл (полный путь) или нет, если не существует, то его можно рассматривать как новый файл. И я могу выполнить некоторые действия для того же самого и также загрузить.
Это просто альтернативное решение.
Изменения в коде:
private static void GetFiles()
{
using (FtpClient conn = new FtpClient())
{
string ftpPath = "ftp://myftp/";
string downloadFileName = @"C:tempFTPTest";
downloadFileName = "\";
conn.Host = ftpPath;
//conn.Credentials = new NetworkCredential("ftptest", "ftptest");
conn.Connect();
//Get all directories
foreach (FtpListItem item in conn.GetListing(conn.GetWorkingDirectory(),
FtpListOption.Modify | FtpListOption.Recursive))
{
// if this is a file
if (item.Type == FtpFileSystemObjectType.File)
{
string localFilePath = downloadFileName item.FullName;
//Only newly created files will be downloaded.
if (!File.Exists(localFilePath))
{
conn.DownloadFile(localFilePath, item.FullName);
//Do any action here.
Console.WriteLine(item.FullName);
}
}
}
}
}
Комментарии:
1. Файл, помимо содержимого, может отличаться размером, датой создания, а не только именем, отсюда ваше предположение, что файл существует на основе файла. Существует, и это тот же файл, что и неправильно.
2. Согласно нашему требованию, это работает нормально. Мы проверяем только новые файлы. Таким образом, проверка по дате не требуется. Другое решение — удалить файл с пути FTP, создать новую папку и поместить его туда, чтобы всякий раз, когда какие-либо файлы попадают в папку FTP, вы могли легко их обнаружить.