FTP仅在我使用Thread.Sleep时有效

时间:2013-11-13 22:00:25

标签: c# ftp

我有一个小型控制台应用程序,可以使用FtpWebRequest对象擦除一些数据并将其上传到FTP目录 - 非常典型。

当我使用调试器逐步完成它时,我已经成功地工作了。正在使用正确的数据将文件写入远程服务器。然后,当我拿出断点并让它翻录时,它创建了没有数据的文件,然后挂起直到它最终超时。除了超时之外没有例外。我把断点重新放入,确定它完美无缺。

我认为调试行为导致暂停并放入Thread.Sleep(10),并再次完美地工作。

我对此只是一个解释感到高兴(只要这不是可怕的做法),但是如何做得更好的建议也将受到赞赏。我会注意到我只是谨慎使用第三方控件。

编辑:我还应该提一下,我不想创建一个物理文件,我宁愿直接编写Stream。

以下是相关代码:

        filePathAndName = new Uri(String.Format("{0}{1}_{2}.txt", Properties.Settings.Default.QTMFTPDirectory, 
            fileNamePrefix, DateTime.Now.ToString("MMddyyHHmmss")));
        fileContents = Encoding.UTF8.GetBytes(csv);

        request = (FtpWebRequest)WebRequest.Create(filePathAndName);
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.Credentials = new NetworkCredential(Properties.Settings.Default.FTPUserName, Properties.Settings.Default.FTPPassword);
        request.ContentLength = fileContents.Length;
        request.KeepAlive = false;

        try
        {
            using (Stream reqStream = request.GetRequestStream())
            {
                reqStream.Write(fileContents, 0, fileContents.Length);
                System.Threading.Thread.Sleep(10); // Won't work without this.
            }
        }
        catch (Exception ex)
        {
            LogError(ex);
        }

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试手动关闭它。

reqStream.Close(); // Close

如果这没有帮助,您可以尝试从服务器获取响应。

GetResponse(); 

来源:

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.getrequeststream(v=vs.110).aspx

编辑:

我知道,using关键字有时无法正确关闭连接。