1

这将使用 FTP 下载 .csv 文件。该文件在服务器上为 46k。当我下载时,它会被截断为 44k。我不知道为什么......当我在 Excel 中查看数据时,它被缩短了。我将缓冲区增加到 4096 但没有骰子(这可能不是问题)。

我最初抓取了以下代码并对其进行了调整:使用 FTPWebRequest 下载文件

任何想法表示赞赏!谢谢。

    private void DownloadFile(string userName, string password, string ftpSourceFilePath, string localDestinationFilePath)
    {
        int bytesRead = 0;
        byte[] buffer = new byte[2048];            

        FtpWebRequest request = CreateFtpWebRequest(ftpSourceFilePath, userName, password, false);
        request.Method = WebRequestMethods.Ftp.DownloadFile;

        Stream reader = request.GetResponse().GetResponseStream();
        FileStream fileStream = new FileStream(localDestinationFilePath, FileMode.Create);

        while (true)
        {
            bytesRead = reader.Read(buffer, 0, buffer.Length);                               

            if (bytesRead == 0)
                break;

            fileStream.Write(buffer, 0, bytesRead);
        }
    }

    private FtpWebRequest CreateFtpWebRequest(string ftpDirectoryPath, string userName, string password, bool keepAlive)
    {
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(ftpDirectoryPath));

        //Set proxy to null. Under current configuration if this option is not set then the proxy that is used will get an html response from the web content gateway (firewall monitoring system)
        request.Proxy = null;

        request.UsePassive = true;
        request.UseBinary = true;
        request.KeepAlive = keepAlive;

        request.Credentials = new NetworkCredential(userName, password);

        return request;
    }
4

1 回答 1

2

试试这个方法:

private void DownloadFile(string userName, string password, string ftpSourceFilePath, string localDestinationFilePath)
{ 
    int Length = 2048;
    Byte[] buffer = new Byte[Length];
    int bytesRead = responseStream.Read(buffer, 0, Length);     

    FtpWebRequest request = CreateFtpWebRequest(ftpSourceFilePath, userName, password, false);
    request.Method = WebRequestMethods.Ftp.DownloadFile;

    Stream reader = request.GetResponse().GetResponseStream();
    FileStream fileStream = new FileStream(localDestinationFilePath, FileMode.Create);

    while (bytesRead > 0)
            {
        //if (bytesRead == 0)
          //  break;
                bytesRead = responseStream.Read(buffer, 0, Length);
                fileStream.Write(buffer, 0, bytesRead);
            }

         fileStream.Close();
}
于 2013-07-30T18:39:45.593 回答