2015-05-16 4 views
1

Я хотел бы использовать эту инструкцию:Использование "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); 

ответ

1

Я боюсь, что вы не можете.

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

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())) 
{ 
... 
} 
+0

и как я могу загрузить файл с самой старой датой создания с FTP-сервера? – garci

+0

Разберите поток, он должен содержать список всех файлов. Затем, используя FtpWebRequest/FtpWebResponse, загрузите самую старую. Обратитесь к этому: [link] (https://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspx) – Leonardo

+0

, но я хочу знать самый старый файл с ковра сервера FTP, а FtpWebRequest/FtpWebResponse мне не помогает. – garci

1

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

В частности, поскольку он не поддерживает команду FTP MLSD, что является единственным надежным способом получения машиночитаемого списка удаленных файлов с их атрибутами.


Существует много сторонних библиотек, которые позволяют это.

Например с WinSCP .NET assembly:

// 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

С вашей comment и ваш other question, вы, кажется, на самом деле нужно, чтобы получить самый старый файл в каталоге FTP. Для этого смотрите:

Оба для новейших, не самый старый, файл. Просто замените .OrderByDescending на .Order в коде C#, чтобы получить самый старый файл.

(я автор WinSCP)

0

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

Смежные вопросы