Использовать 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);

person garci    schedule 16.05.2015    source источник


Ответы (3)


Боюсь, вы не можете.

Попробуйте это вместо этого:

FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://192.168.47.1/DocXML");
req.Credentials = new NetworkCredential("foo", "[email protected]");
req.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse res = (FtpWebResponse)req.GetResponse();
using (StreamReader streamReader = new StreamReader(res.GetResponseStream()))
{
...
}
person Leonardo    schedule 16.05.2015
comment
и как я могу загрузить файл с самой старой датой создания с FTP-сервера? - person garci; 16.05.2015
comment
Разберите поток, он должен содержать весь список файлов. Затем с помощью FtpWebRequest/FtpWebResponse загрузите самый старый. Обратитесь к этому: ссылка - person Leonardo; 16.05.2015
comment
но я хочу узнать самый старый файл с ковра FTP-сервера, и FtpWebRequest/FtpWebResponse мне не помогают. - person garci; 16.05.2015
comment
Извините, используйте req.Method = WebRequestMethods.Ftp.ListDirectoryDetails; и проанализируйте ответ, чтобы выбрать самый старый, а затем загрузите его. - person Leonardo; 16.05.2015

Если вам нужна структурированная информация о файлах в каталоге FTP, вы должны использовать стороннюю библиотеку. Платформа .NET не предлагает такой функциональности.

В частности, поскольку он не поддерживает команду 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)

person Martin Prikryl    schedule 18.05.2015

Не работает таким образом. Я рекомендую использовать 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();

person Alexander Ki    schedule 25.02.2016