Используйте "DirectoryInfo" с FTP-сервером
Я бы использовал эту инструкцию:
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("ftp://192.168.47.1/DocXML");
Но я не могу.
Как я могу использовать ("ftp://192.168.47.1/DocXML");
с new System.IO.DirectoryInfo("");
?
Это код
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(@"\\192.168.47.1\DocXML");`
IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
3 ответа
Боюсь, ты не сможешь.
Попробуйте это вместо этого:
FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://192.168.47.1/DocXML");
req.Credentials = new NetworkCredential("foo", "foo@foo.com");
req.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse res = (FtpWebResponse)req.GetResponse();
using (StreamReader streamReader = new StreamReader(res.GetResponseStream()))
{
...
}
Если вам нужна структурированная информация о файлах в каталоге FTP, вы должны использовать стороннюю библиотеку..NET Framework не предлагает такой функциональности.
Особенно потому, что он не поддерживает MLSD
Команда FTP, которая является единственным надежным способом получения машиночитаемого списка удаленных файлов с их атрибутами.
Есть много сторонних библиотек, которые позволяют это.
Например, для сборки WinSCP .NET:
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "example.com",
UserName = "username",
Password = "password",
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Get list of files in the directory
string remotePath = "/remote/path/";
RemoteDirectoryInfo directoryInfo = session.ListDirectory(remotePath);
foreach (RemoteFileInfo fileInfo in directoryInfo.Files)
{
Console.WriteLine("{0} with size {1}, permissions {2} and last modification at {3}",
fileInfo.Name, fileInfo.Length, fileInfo.FilePermissions,
fileInfo.LastWriteTime);
}
}
Рекомендации:
https://winscp.net/eng/docs/library_session_listdirectory
https://winscp.net/eng/docs/library_remotefileinfo
Из вашего комментария и вашего другого вопроса вам, похоже, действительно нужно получить самый старый файл в каталоге FTP. Для этого смотрите:
- Загрузите последний файл с FTP-сервера (C#)
- Загрузка самого последнего файла (PowerShell, но легко переводится на C#)
Оба для самого нового, не самого старого файла. Просто замените .OrderByDescending
с .Order
в коде C#, чтобы получить самый старый файл.
(Я автор WinSCP)
Не работает таким образом. Я рекомендую использовать SFTP вместо FTP. Для этого я использую стороннюю библиотеку "SharpSSH". Кажется, работает следующий пример:
using System.IO;
using Tamir.SharpSsh;
using Tamir.SharpSsh.jsch;
string ip = "DestinationIp";
string user = "JohnDoe";
string password = "YourPassword";
Sftp sftp = new Tamir.SharpSsh.Sftp(ip, user, password);
sftp.Connect();
FileInfo yourFileInfo = new FileInfo("path");
Также есть возможность добавить первичный ключ с помощью sftp.AddIdentityFile();