如何使用C#从FTP下载大量文件

本文关键字:文件 下载 FTP 何使用 | 更新日期: 2023-09-27 18:26:43

我需要按计划的时间间隔运行控制台应用程序,该应用程序只需要从FTP站点下载.pgp文件。FTP中的任何pgp文件都必须下载。我已经找到了获取FTP目录列表的示例代码,并在这里写道:

FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://ourftpserver");
        req.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
        req.Credentials = new NetworkCredential("user", "pass");
        FtpWebResponse response = (FtpWebResponse)req.GetResponse();
        Stream responseStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);
        Console.WriteLine(reader.ReadToEnd());
        Console.WriteLine("Directory List Complete, status {0}", response.StatusDescription);
        reader.Close();
        response.Close();

我必须做些什么才能从目录列表中下载所有.pgp类型的文件,并将它们保存在服务器上的本地目录中?

如何使用C#从FTP下载大量文件

FtpWebRequestFtpWebResponse对象的设计确实会发出单个请求(即下载单个文件等)

您正在寻找FTP客户端。.NET Framework中没有,但有一个免费的System.NET.FtpClient,它显然运行得很好。

有一个非常好的库可以使用https://sshnet.codeplex.com/代码段:您需要将要下载文件的文件夹路径作为localFilesPath,并将要下载的Ftp文件夹路径作为remoteFTPPath。

public static void DownloadFilesFromFTP(string localFilesPath, string remoteFTPPath)
        {
            using (var sftp = new SftpClient(Settings.Default.FTPHost, Settings.Default.FTPUsername, Settings.Default.FTPPassword))
            {
                sftp.Connect();
                sftp.ChangeDirectory(remoteFTPPath);
                var ftpFiles = sftp.ListDirectory(remoteFTPPath, null);
                StringBuilder filePath = new StringBuilder();
                foreach (var fileName in ftpFiles)
                {
                    filePath.Append(localFilesPath).Append(fileName.Name);
                    string e = Path.GetExtension(filePath.ToString());
                    if (e == ".csv")
                    {
                        using (var file = File.OpenWrite(filePath.ToString()))
                        {
                            sftp.DownloadFile(fileName.FullName, file, null);
                            sftp.Delete(fileName.FullName);
                        }
                    }
                    filePath.Clear();
                }
                sftp.Disconnect();
            }
        }

从ftp下载文件的代码。

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://127.0.0.0/my.txt");
        request.Method = WebRequestMethods.Ftp.DownloadFile;
        request.Credentials = new NetworkCredential("userid", "pasword");
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        Stream responseStream = response.GetResponseStream();
        FileStream file = File.Create(@c:'temp'my.txt);
        byte[] buffer = new byte[32 * 1024];
        int read;
        //reader.Read(
        while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0)
        {
            file.Write(buffer, 0, read);
        }
        file.Close();
        responseStream.Close();
        response.Close();

Ultimate FTP可以帮助您。以下代码片段表明:

using ComponentPro.IO;
using ComponentPro.Net;
...
// Create a new instance.
Ftp client = new Ftp();
// Connect to the FTP server.
client.Connect("myserver");
// Authenticate.
client.Authenticate("userName", "password");
// ...
// Get all directories, subdirectories, and files from remote folder '/myfolder' to 'c:'myfolder'.
client.DownloadFiles("/myfolder", "c:''myfolder");
// Get all directories, subdirectories, and files that match the specified search pattern from remote folder '/myfolder2' to 'c:'myfolder2'.
client.DownloadFiles("/myfolder2", "c:''myfolder2", "*.pgp");
// or you can simply put wildcard masks in the source path, our component will automatically parse it.
// download all *.pgp files from remote folder '/myfolder2' to local folder 'c:'myfolder2'.
client.DownloadFiles("/myfolder2/*.pgp", "c:''myfolder2");
// Download *.pgp files from remote folder '/myfolder2' to local folder 'c:'myfolder2'.
client.DownloadFiles("/myfolder2/*.pgp", "c:''myfolder2");
// Get files in the folder '/myfolder2' only.
TransferOptions opt = new TransferOptions(true, RecursionMode.None, false, (SearchCondition)null, FileExistsResolveAction.Overwrite, SymlinksResolveAction.Skip);
client.DownloadFiles("/myfolder2", "c:''myfolder2", opt);
// ...
// Disconnect.
client.Disconnect();

http://www.componentpro.com/doc/ftp有更多的例子。