Используйте "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. Для этого смотрите:

Оба для самого нового, не самого старого файла. Просто замените .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();

Другие вопросы по тегам