从FTP服务器下载多个文件

我在ftp服务器上有多个文件。我不知道这些文件的名称,除了它们都是。 xml文件。 如何使用.Net的FtpWebRequest以编程方式下载这些文件?

谢谢。

很可能你必须发出一个列出所有文件的Dir命令,然后通过每个文件下载它。

以下是获取目录列表的一些信息。

http://msdn.microsoft.com/en-us/library/ms229716.aspx

看一下ListDirectory函数。 它相当于FTP中的NLIST命令。

您可能希望使用像这样的现有库而不是编写自己的库。

FtpWebRequest __request = (FtpWebRequest)FtpWebRequest.Create(__requestLocation); __request.Method = WebRequestMethods.Ftp.ListDirectory; var __response = (FtpWebResponse)__request.GetResponse(); using (StreamReader __directoryList = new StreamReader(__response.GetResponseStream())) { string ___line = __directoryList.ReadLine(); while (___line != null) { if (!String.IsNullOrEmpty(___line)) { __output.Add(___line); } ___line = __directoryList.ReadLine(); } break; } 

获取目标文件……

 FtpWebRequest __request = null; FtpWebResponse __response = null; byte[] __fileBuffer = null; byte[] __outputBuffer = null; __request = (FtpWebRequest)FtpWebRequest.Create(__requestLocation); __request.Method = WebRequestMethods.Ftp.DownloadFile; __response = (FtpWebResponse)__request.GetResponse(); using (MemoryStream __outputStream = new MemoryStream()) { using (Stream __responseStream = __response.GetResponseStream()) { using (BufferedStream ___outputBuffer = new BufferedStream(__responseStream)) { __fileBuffer = new byte[BLOCKSIZE]; int ___readCount = __responseStream.Read(__fileBuffer, 0, BLOCKSIZE); while (___readCount > 0) { __outputStream.Write(__fileBuffer, 0, ___readCount); ___readCount = __responseStream.Read(__fileBuffer, 0, BLOCKSIZE); } __outputStream.Position = 0; __outputBuffer = new byte[__outputStream.Length]; //Truncate Buffer to only the specified bytes. Store into output buffer Array.Copy(__outputStream.GetBuffer(), __outputBuffer, __outputStream.Length); break; } } } try { __response.Close(); } catch { } __request = null; __response = null; return __outputBuffer; 

从我拥有的其他一些代码中删除,所以它可能不会直接编译和运行。

我不知道FtpWebRequest是否是严格的要求。 如果您可以使用第三方组件,则代码可以完成您的任务:

 // create client, connect and log in Ftp client = new Ftp(); client.Connect("ftp.example.org"); client.Login("username", "password"); // download all files in the current directory which matches the "*.xml" mask // at the server to the 'c:\data' directory client.GetFiles("*.xml", @"c:\data", FtpBatchTransferOptions.Default); client.Disconnect(); 

该代码使用Rebex FTP ,可在此处下载 。

免责声明:我参与了该产品的开发。