Мне нужно вернуть файлы сегодняшнего дня, которые являются CSV-файлами, в локальный каталог. Я использовал этот пример с свободного сайта ftp, но он не работает, он находит каталог / in / в порядке, и там есть тестовый файл.но он не загружает файл.
public void GetListing()
{
using (FtpClient conn = new FtpClient())
{
conn.Host = ftpIpAddress;
conn.Credentials = new NetworkCredential(ftpUserName,ftpPassword);
foreach (FtpListItem item in conn.GetListing(conn.GetWorkingDirectory(),
FtpListOption.Modify | FtpListOption.Size))
{
switch (item.Type)
{
case FtpFileSystemObjectType.Directory:
break;
case FtpFileSystemObjectType.File:
Console.Write("Filename " + item.FullName);
conn.DownloadFile(item.FullName,"/in/");
break;
case FtpFileSystemObjectType.Link:
// derefernece symbolic links
if (item.LinkTarget != null)
{
// see the DereferenceLink() example
// for more details about resolving links.
item.LinkObject = conn.DereferenceLink(item);
if (item.LinkObject != null)
{
// switch (item.LinkObject.Type)...
}
}
break;
}
}
// same example except automatically dereference symbolic links.
// see the DereferenceLink() example for more details about resolving links.
foreach (FtpListItem item in conn.GetListing(conn.GetWorkingDirectory(),
FtpListOption.Modify | FtpListOption.Size | FtpListOption.DerefLinks))
{
switch (item.Type)
{
case FtpFileSystemObjectType.Directory:
break;
case FtpFileSystemObjectType.File:
Console.Write("File " + item.FullName);
break;
case FtpFileSystemObjectType.Link:
if (item.LinkObject != null)
{
// switch (item.LinkObject.Type)...
}
break;
}
}
}
}
Я установил тестовую среду с сервером filezilla на 127.0.1 Я передаю свои данные своему классу ниже как таковой
ServerConnection connection = new ServerConnection();
connection.ftpIpAddress = "127.0.0.1";
connection.ftpUserName = "ftpuser";
connection.ftpPassword = "ftppassword";
connection.LocalDestDirectory = @"C:\ImportedFromPump\in";
connection.remoteDirectory = @"\in\";
IЯ хочу сохранить файлы в локальном каталоге, а также после их загрузки. Я хочу удалить их с ftp, но я не уверен, как это сделать.
Я следовал этому уроку здесь.
https://github.com/robinrodricks/FluentFTP/blob/master/FluentFTP.Examples/GetListing.cs
Результаты отладочной информации:
# OpenPassiveDataStream(AutoPassive, "MLSD /", 0)
Command: EPSV
Response: 229 Entering Extended Passive Mode (|||63478|)
Status: Connecting to 127.0.0.1:63478
Command: MLSD /
Response: 150 Opening data channel for directory listing of "/"
+---------------------------------------+
Listing: type=dir;modify=20181018113309; Archived
Listing: type=dir;modify=20181018115328; in
-----------------------------------------
Status: Disposing FtpSocketStream...
# CloseDataStream()
Response: 226 Successfully transferred "/"
Status: Disposing FtpSocketStream...
# Dispose()
Status: Disposing FtpClient object...
Command: QUIT
Response: 221 Goodbye
Status: Disposing FtpSocketStream...
Status: Disposing FtpSocketStream...
Изменить 2
Хорошо, поэтому я получаюнемного дальше и изменил мой код для использования файла загрузки, но теперь я получаю сообщение об отказе в доступе.
public void GetListing()
{
try
{
using (FtpClient conn = new FtpClient())
{
IEnumerable<string> directorys = new[] { "/in" };
conn.Host = ftpIpAddress;
conn.Credentials = new NetworkCredential(ftpUserName, ftpPassword);
FtpListItem[] files = conn.GetListing("/in/", FtpListOption.AllFiles)
.Where(x => x.Type == FtpFileSystemObjectType.File)
.OrderBy(x => x.Modified)
.ToArray();
foreach(FtpListItem file in files)
{
conn.DownloadFile(Environment.GetEnvironmentVariable("LocalAppData") + @"\Fuel\",file.FullName, true);
}
}
}
catch
(Exception ex)
{
}
}
Ошибка здесь
DownloadFile ("C: \ Users \user \ AppData \ Local \ Fuel \ "," /in/FuelPumpData.csv ",True, None) Возникло исключение:
'System.IO.DirectoryNotFoundException' в mscorlib.dll
Даже думал, что это папка пользователя, и она существует, что, черт возьми, происходит.
Редактировать 2 Чтобы доказать, что каталог существует.
Изменить 3 Чтобы показать, что каталог ftp существует
Редактировать 4
Чтобы доказать, что объект .net находит файл в коде.
Редактировать 5 Показать каталог разрешений.
Редактировать 6