2015-05-16 106 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目錄中的文件信息,您必須使用第三方庫。 .NET框架不提供這樣的功能。

特別是因爲它不支持MLSD FTP命令,檢索機器可讀的遠程文件及其屬性的唯一可靠方法是什麼?


有許多第三方庫允許這樣做。

例如與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目錄最早的文件。對於看到:

兩者都是最新的,最古老的不是,文件。只需將C#代碼中的.OrderByDescending替換爲.Order即可獲取最舊的文件。

(我的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()的可能性;