如何使用c#从FTP下载文件

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

我正在尝试从FTP下载文件。但是服务器返回错误550(未找到文件,无法访问)在代码下面,

FtpWebRequest reqFTP;
try
{
    FileStream outputStream = new FileStream("d:/test/" +
                            "''" +a , FileMode.Create,FileAccess.Write,FileShare.Read);
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://example.com/" + " /" + a));
    reqFTP.KeepAlive = false;
    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
    reqFTP.UseBinary = true;
    reqFTP.Proxy = null;
    reqFTP.UsePassive = false;
    reqFTP.Credentials = new NetworkCredential("aaaa", "bbbb@1234");

    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    // ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
    Stream ftpStream = response.GetResponseStream();
    long cl = response.ContentLength;
    int bufferSize = 2048;
    int readCount;
    byte[] buffer = new byte[bufferSize];
    readCount = ftpStream.Read(buffer, 0, bufferSize);
    while (readCount > 0)
    {
        outputStream.Write(buffer, 0, readCount);
        readCount = ftpStream.Read(buffer, 0, bufferSize);
    }
    ftpStream.Close();
    outputStream.Close();
    response.Close();
}
catch (WebException ex)
{
    //MessageBox.Show(ex.Message);
    String status = ((FtpWebResponse)ex.Response).StatusDescription;
    MessageBox.Show(status);
}

文件可以显示在列表中。当阅读没有问题,而下载它抛出一个错误-550,在我的ftp我有。txt,img,.pdf,.rar,.exe文件格式。

如何使用c#从FTP下载文件

看一下这篇文章:使用c# WebClient类上传和下载FTP文件

基本上,它依赖于WebClient对象来完成所有的网络工作。

本文将其封装在一个自定义类中,该类与凭据一起工作。

文章的重要部分是:

public byte[] DownloadData(string path)
{
    // Get the object used to communicate with the server.
    WebClient request = new WebClient();
    // Logon to the server using username + password
    request.Credentials = new NetworkCredential(Username, Password);
    return request.DownloadData(BuildServerUri(path));
}

确保凭证和路径正确。

我只是在FTP地址中设置了确切的路径,并设置缓冲区大小也高值,然后它的工作很好。

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://example.com/file path);

缓冲区大小,

 byte[] buffer = new byte[32 * 1024];