2016-07-10 18 views
0

我正在一个简单的FTP应用程序读取服务器的服务器清单,并拉下新的文件。为了做到这一点,我必须阅读目录列表中的内容。当文件名和/或子目录名称不包含空格时,FTP ListDirectoryDe​​tails完美地工作。但是,如果目录有空白(即名称中的空格),我的读者会抛出一个ObjectDisposed异常。除了下面的方法(框架中其他方法调用的所有内容)之外,堆栈跟踪不包含用户代码。StreamReader抛出ObjectDisposed异常时读取FTP DirectoryList与空间

我已经谷歌搜索和谷歌搜索一些更多的运气没有解释这个例外。任何援助将不胜感激!谢谢!

public async Task<List<string>> ListDirectoryDetailsAsync() 
    { 
     var list = new List<string>(); 
     var request = CreateRequest(WebRequestMethods.Ftp.ListDirectoryDetails); 

     using (var response = (FtpWebResponse)await request.GetResponseAsync()) 
     using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) 
     { 
      while (!reader.EndOfStream) 
      { 
       list.Add(reader.ReadLine()); 
      } 
     } 
     return list; 
    } 
+0

尝试:reader.ReadLine()。修剪() – jdweng

+0

谢谢,但我面临的问题是在目录/文件名称本身的空白 - 而不是在开始或结束的空白空间。因此,例如, CMorton9249

回答

0

我已经在本地对FileZilla服务器(版本0.9.57测试版)尝试了您的代码。你的代码很好地读取带有空格的目录名称。我假设你的问题是针对你的数据或环境的。捕获网络流量可能会提供一些见解。

+0

我以为它也会!我必须承认有这个问题会感到震惊。 我还没有尝试过FileZilla服务器,但它肯定值得一试。另外,由于我在追踪网络问题方面的经验大部分来自浏览器到服务器,捕获这种类型的网络流量对我来说是一个未知的领域。对于我在拨打电话时应该运行的工具,您有什么好的建议吗?现在可能值得一提的是,我没有直接访问FTP服务器(托管解决方案)。 – CMorton9249

+0

我会建议首先在您的开发环境中安装FileZilla服务器,并创建一些文件/目录名称,以便在生产环境中引起此异常。如果异常仍然发生,那么我宁愿在客户端搜索(例如,.net框架版本;我的实验是用4.6.1完成的)。为了捕获网络流量,我推荐Wireshark(https://www.wireshark.org/)。 –

+0

我在我的开发机器上安装了FileZilla Server,并可以成功重新创建场景。显然,在包含空格的文件名上使用ReadLine()时,会丢弃StreamReader的基础流。当循环尝试查看是否需要另一个ReadLine()时,会发生IDisposedObjectException。 – CMorton9249