【问题标题】:Streamreader Throwing ObjectDisposed Exception When Reading FTP DirectoryList With SpacesStreamreader 在读取带有空格的 FTP DirectoryList 时抛出 ObjectDisposed 异常
【发布时间】:2016-07-10 12:17:24
【问题描述】:

我正在开发一个简单的 FTP 应用程序,它可以读取服务器的服务器清单并下载新文件。为此,我必须阅读目录列表的内容。当文件名和/或子目录名称不包含空格时,FTP ListDirectoryDe​​tails 可以完美运行。但是,如果目录有空格(即名称中的空格),我的读者会抛出 ObjectDisposed 异常。除了下面的方法(其他所有方法调用都在框架中)之外,堆栈跟踪不包含任何用户代码。

我已经用谷歌搜索和搜索了更多,但没有运气解释这个异常。任何帮助将不胜感激!谢谢!

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;
    }

【问题讨论】:

  • 试试:reader.ReadLine().Trim()
  • 谢谢,但我面临的问题是目录/文件名本身的空格——而不是开头或结尾的空格。因此,例如,server/directory with spaces/file with spaces.csv>

标签: c# ftp async-await streamreader


【解决方案1】:

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

【讨论】:

  • 我也认为会的!我必须承认有这个问题感到震惊。我没有尝试过 FileZilla 服务器,但它当然值得一试。此外,由于我追踪网络问题的大部分经验是从浏览器到服务器,因此捕获这种类型的网络流量对我来说是未知领域。您对我在拨打电话时应该运行的工具有什么好的建议吗?在这一点上可能值得一提的是,我无法直接访问 FTP 服务器(托管解决方案)。
  • 我建议先在您的开发环境中安装 FileZilla 服务器,并在您的生产环境中创建一些会导致此异常的文件/目录名称。如果异常仍然发生,那么我宁愿在客户端搜索(例如 .net 框架版本;我的实验是用 4.6.1 完成的)。对于捕获网络流量,我推荐 Wireshark (wireshark.org)。
  • 我已经在我的开发机器上安装了 FileZilla 服务器,并且可以成功地重新创建场景。显然,当对包含空格的文件名使用 ReadLine() 时,会释放 StreamReader 的底层流。 IDisposedObjectException 在循环尝试查看是否需要另一个 ReadLine() 时发生。
  • 我想知道为什么您的代码在我的环境中工作,但在您的环境中却不行......也许不同的 .net Framework 版本?我建议使用最新的框架创建一个小型控制台应用程序并单独执行您的代码片段。
  • 刚刚在 .Net 4.6.1 上完成了一个简单的控制台应用程序。这绝对是环保的。在我的本地 FTP 实例上运行时,它可以顺利运行。当尝试连接到我的产品服务器时,它会在同一个目录中爆炸。我尝试了wireshark,但由于连接到FTP服务器需要明确的TLS,数据包都被加密了,没有太大帮助。有趣的事实——显然 Firefox 的 SSLKEYLOG 设置不再创建(预)masterKeyLog 文件。我将联系我的主机,看看他们的服务器是否有任何我可以查看的日志文件。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 2013-05-24
  • 2012-11-18
  • 2013-04-14
  • 1970-01-01
相关资源
最近更新 更多