0

我编写了一个程序,它从远程 ftp 站点下载文件并将其保存到本地 c 驱动器,然后将该文件上传到单独的服务器。现在的问题是,当文件被下载时,它在本地 C 上创建的文本文件中没有数据,我不知道为什么会这样。这是我正在使用的代码

// Download File
    public void download(string remoteFile, string localFile)
    {

        try
        {
            // Create an FTP Request 
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(downhost + "/" + remoteFile);
            // Log in to the FTP Server with the User Name and Password Provided
            ftpRequest.Credentials = new NetworkCredential(downuser, downpass);
            // When in doubt, use these options
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;
            /* Set HTTP Proxy to Null to avoid The Requested FTP Command Is Not Supported When Using HTTP Proxy error */
            ftpRequest.Proxy = null;
            // Specify the Type of FTP Request
            ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
            // Establish Return Communication with the FTP Server
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            // Get the FTP Server's Response Stream
            ftpStream = ftpResponse.GetResponseStream();
            // Open a File Stream to Write the Downloaded File
            FileStream localFileStream = new FileStream(localFile, FileMode.Create);
            // Buffer for the Downloaded Data 
            byte[] byteBuffer = new byte[bufferSize];
            int bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
            // Download the File by Writing the Buffered Data Until the Transfer is Complete

            try
            {
                while (bytesRead > 0)
                {
                    localFileStream.Write(byteBuffer, 0, bytesRead);
                    bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
                }

            }

            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            // Resource Cleanup
            localFileStream.Close();
            ftpStream.Close();
            ftpResponse.Close();
            ftpRequest = null;

        }
        catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        return;
    }

我使用在http://www.codeproject.com/Tips/443588/Simple-Csharp-FTP-Class找到的代码作为构建我的程序的基础,并且我已经完成了谷歌搜索其他人是如何编写他们的ftp 下载脚本,但无法找出未写入数据的任何原因。

任何帮助表示赞赏。

4

4 回答 4

0

我在使用相同的方法时遇到问题。我确实找到了一种让系统工作的方法,但我不得不将ftpstream你的代码复制到另一个流中,如下所示:(在 vb.net 中,我知道,对不起)

ftpStream.copyTo(MySecondStream)
ftpStream.close()
'do whatever you want with the copy now
Return MySecondStream

也许它与如何处理初始流以及它保持打开多长时间有关。我在这里发布了我的问题:为什么我必须将 FTP 流复制到另一个变量才能将其返回给调用方法?

于 2013-05-27T05:36:23.327 回答
0

我在上传时遇到了同样的问题。写入 0 个字节。代码在一台 FTP 服务器上运行,但在另一台服务器上不运行。只需执行以下操作:

                client.FtpStream.Flush();
                client.FtpStream.Close();
于 2014-07-23T22:41:28.000 回答
0

我意识到这有点晚了,但是我在尝试使用该示例时遇到了同样的问题,我设法从此处获取了一个使用示例的 FTP 下载:

http://www.techrepublic.com/blog/howdoi/how-do-i-use-c-to-upload-and-download-files-from-an-ftp-server/165

于 2013-02-08T01:32:36.033 回答
0

刷新文件。localFileStream.Flush();在关闭它之前调用它。

于 2012-12-05T17:04:22.113 回答