在处理FTP目录列表时,如果遇到ObjectDisposed
异常,通常是因为流已经被关闭或释放,而你尝试再次读取它。这种情况在使用流读取器(如StreamReader
)时尤为常见。以下是一些基础概念和相关解决方案:
以下是一个示例代码,展示了如何安全地读取带空格的FTP目录列表,并避免ObjectDisposed
异常:
using System;
using System.IO;
using System.Net;
using System.Text;
class Program
{
static void Main()
{
string ftpUrl = "ftp://example.com/directory/";
string username = "user";
string password = "pass";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential(username, password);
try
{
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
using (Stream responseStream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
catch (ObjectDisposedException ex)
{
Console.WriteLine("流已被关闭: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("发生错误: " + ex.Message);
}
}
}
using
语句: 这确保了资源(如流)在不再需要时会被正确释放。ObjectDisposedException
,以便在流被意外关闭时提供有意义的错误信息。通过上述方法,可以有效避免在读取FTP目录列表时遇到的ObjectDisposed
异常,并确保代码的健壮性和可靠性。
领取专属 10元无门槛券
手把手带您无忧上云