为什么我得到异常:对象处置异常
本文关键字:异常 对象 为什么 | 更新日期: 2023-09-27 18:33:56
这是代码:
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8);
long filel = readStream.ReadToEnd().Length;
readStream.Close();
FileStream writeStream = new FileStream(ftpdirectories + "''" + filenameonly, FileMode.Create);
string fnn = ftpdirectories + "''" + filenameonly;
int Length = 2048;
Byte[] buffer = new Byte[Length];
int bytesRead = responseStream.Read(buffer, 0, Length);
例外情况如下:
int bytesRead = responseStream.Read(buffer, 0, Length);
如果我没有长时间使用流阅读器和关闭,它工作正常,但是一旦我添加了流阅读器,我就会得到异常。
无法访问已释放的对象。
对象名称:"System.Net.Sockets.NetworkStream"。
System.ObjectDisposedException was caught
HResult=-2146232798
Message=Cannot access a disposed object.
Object name: 'System.Net.Sockets.NetworkStream'.
Source=System
ObjectName=System.Net.Sockets.NetworkStream
StackTrace:
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.FtpDataStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at FTP_ProgressBar.FtpProgress.DownloadFtpContent(Object sender, String file, String filesdirectories, String fn) in c:'ftp_progressbar'FTP_ProgressBar'FtpProgress.cs:line 284
InnerException:
第 284 行是:
int bytesRead = responseStream.Read(buffer, 0, Length);
ObjectDisposedException:对已释放的对象执行操作时引发的异常。
当您关闭readStream
时
readStream.Close();
StreamReader.Close 方法关闭 StreamReader 对象和基础流,并释放与读取器关联的任何系统资源。Close的此实现调用传递真值的Dispose方法。
在 中设置的基础responseStream
StreamReader readStream = new StreamReader(responseStream, ...
关闭并关闭流调用处置方法,它被释放。 之后,您可以访问responseStream
和繁荣! ObjectDisposedException
当
StreamReader
关闭时,Stream
被关闭并被处置。有关详细信息,请查看 StreamReader
Close 方法上的 MSDN 页。
也就是说,StreamReader
的关闭方法
关闭 StreamReader 对象和基础流,并释放与读取器关联的任何系统资源。
随之而来的是:
Close的此实现调用传递真值的Dispose方法。
你使用..
StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8);
提供响应所需的编码,如下所示。
StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.GetEncoding("Windows-1252"));
这发生在德语字符上,如 ü、ö、ä 等。因此,UTF-8 可能在读取时失败并关闭流。因此,您需要针对 URL 或预期响应维护编码列表,并按上述方式传递它。