Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从FTP服务器下载多个文件_C#_Ftpwebrequest - Fatal编程技术网

C# 从FTP服务器下载多个文件

C# 从FTP服务器下载多个文件,c#,ftpwebrequest,C#,Ftpwebrequest,我在ftp服务器上有多个文件。我不知道这些文件的名称,只知道它们都是。xml文件。 如何使用.Net的FtpWebRequest以编程方式下载这些文件 谢谢。您很可能需要发出一个Dir命令,列出所有文件,然后逐一下载 下面是一些关于获取目录列表的信息 您可能希望使用现有的库,而不是编写自己的库。看看函数。它相当于FTP中的NLIST命令 FtpWebRequest __request = (FtpWebRequest)FtpWebRequest.Create(__requestLocation)

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


谢谢。

您很可能需要发出一个Dir命令,列出所有文件,然后逐一下载

下面是一些关于获取目录列表的信息


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

看看函数。它相当于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();
该代码使用可以是的


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

下载的标准是什么:服务器上的所有文件,所有以特定字符串或特定大小或类型开头的文件,等等。Jay,我现在修改了我的问题。谢谢。使用第一个文件的输出调用循环中的第二个代码。NET本机没有用于MGET的命令。您可以尝试将命令类型从WebRequestMethods.Ftp.DownloadFile更改为“MGET”,但我不知道流会是什么样子。只是出于好奇,为什么要使用双下划线和三下划线?旧习惯很难改掉。单下划线类作用域、双局部(函数作用域)、三内部作用域(块级)。我写C语言时的一个阻碍。在可视化编辑器之外进行代码审查时,它们仍然很有用