2015-05-15 162 views
2

我必須從FTP服務器下載最新文件。我知道如何從我的電腦下載最新的文件,但我不知道如何從FTP服務器下載。從FTP服務器下載最新文件

如何從FTP服務器下載最新文件?

這是我的計劃,從我的電腦

public Form1() 
    { 
     InitializeComponent(); 

     string startFolder = @"C:\Users\user3\Desktop\Documentos XML"; 

     System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder); 

     IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories); 

     IEnumerable<System.IO.FileInfo> fileQuerry = 
      from file in fileList 
      where file.Extension == ".txt" 
      orderby file.CreationTimeUtc 
      select file; 

     foreach (System.IO.FileInfo fi in fileQuerry) 
      { 
       var newestFile = 
       (from file in fileQuerry 
       orderby file.CreationTimeUtc 
       select new { file.FullName, file.Name }) 
       .First(); 
       textBox2.Text = newestFile.FullName; 
      } 
    } 

OK下載最新的文件,有了這個代碼,我知道最後一個文件的日期,但我怎麼知道該文件的名稱???? ????

+1

過於寬泛,可能的[檢索創建日期的重複文件(FTP)](http://stackoverflow.com/questions/4454281/retrieving-creation-date-of-file-ftp) –

+0

謝謝!我把代碼放在'FtpWebRequest request'和'WebRequestMethods'中,並且我把'使用System.Net。FtpWebRequest;'和none,我有相同的錯誤 – garci

+0

從你的問題,我猜你想從FTP服務器下載最新的文件。 –

回答

3

您必須檢索遠程文件的時間戳以選擇最新的文件。

不幸的是,使用.NET框架提供的功能檢索目錄中所有文件的修改時間戳沒有真正可靠和有效的方法,因爲它不支持FTP MLSD命令。命令MLSD以標準化的機器可讀格式提供遠程目錄的列表。命令和格式由RFC 3659標準化。

替代品可以使用,由.NET框架支持:


另外,您可以使用支持現代MLSD命令第三方FTP客戶端實現。

例如WinSCP .NET assembly支持。

甚至有一個例子適合您的特定任務:Downloading the most recent file
的例子是PowerShell和SFTP,但轉化爲C#和FTP容易:

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

    // Select the most recent file 
    RemoteFileInfo latest = 
     directoryInfo.Files 
      .OrderByDescending(file => file.LastWriteTime) 
      .First(); 

    // Download the selected file 
    string localPath = @"C:\local\path\"; 
    string sourcePath = RemotePath.EscapeFileMask(remotePath + latest.Name); 
    session.GetFiles(sourcePath, localPath).Check(); 
} 

(我的WinSCP的作者)

相關問題