StreamReader 对象被自动释放
StreamReader object got automatically disposed
我遇到了一个奇怪的错误。
我需要从 excel 下载一些今天上传的文件。 FTP 上的文件在文件名后附加了时间戳。
代码如下:
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(strUrl);
ftpRequest.Credentials = new NetworkCredential(strUserName, strPassword);
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
Stream responseStream = response.GetResponseStream();
string line = streamReader.ReadLine();
while (!streamReader.EndOfStream)
{
if (line.Contains(DateTime.Now.ToString("yyyyMMdd")))
{
strDownloadFilesName.Add(line);
downloadPath = downloadPath + line;
byte[] buffer = new byte[2048];
FileStream fs = new FileStream(downloadPath, FileMode.Create);
int ReadCount = responseStream.Read(buffer, 0, buffer.Length);
while (ReadCount > 0)
{
fs.Write(buffer, 0, ReadCount);
ReadCount = responseStream.Read(buffer, 0, buffer.Length);
}
string ResponseDescription = response.StatusDescription;
//fs.Close();
//responseStream.Close();
}
line = streamReader.ReadLine();
}
在上面的代码中,一旦 if 条件为真,那么经过一些迭代后,
line = streamReader.ReadLine();
此行抛出以下错误:
Cannot access dispose object.
Object name: 'System.Net.Sockets.NetworkStream'.
请帮我解决一下。
提前致谢。
您可以尝试以下操作,
using (StreamReader streamread = new StreamReader(responseStream))
{
string responseString = streamread.ReadToEnd();
}
因此,与其一次读取一行,不如一次读取整个流。
希望对你有帮助。
作为问题解决方案的一部分,我需要进行不同的调用来实现它,而不是通过调用一次来循环它。
我遇到了一个奇怪的错误。
我需要从 excel 下载一些今天上传的文件。 FTP 上的文件在文件名后附加了时间戳。 代码如下:
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(strUrl);
ftpRequest.Credentials = new NetworkCredential(strUserName, strPassword);
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
Stream responseStream = response.GetResponseStream();
string line = streamReader.ReadLine();
while (!streamReader.EndOfStream)
{
if (line.Contains(DateTime.Now.ToString("yyyyMMdd")))
{
strDownloadFilesName.Add(line);
downloadPath = downloadPath + line;
byte[] buffer = new byte[2048];
FileStream fs = new FileStream(downloadPath, FileMode.Create);
int ReadCount = responseStream.Read(buffer, 0, buffer.Length);
while (ReadCount > 0)
{
fs.Write(buffer, 0, ReadCount);
ReadCount = responseStream.Read(buffer, 0, buffer.Length);
}
string ResponseDescription = response.StatusDescription;
//fs.Close();
//responseStream.Close();
}
line = streamReader.ReadLine();
}
在上面的代码中,一旦 if 条件为真,那么经过一些迭代后,
line = streamReader.ReadLine();
此行抛出以下错误:
Cannot access dispose object.
Object name: 'System.Net.Sockets.NetworkStream'.
请帮我解决一下。 提前致谢。
您可以尝试以下操作,
using (StreamReader streamread = new StreamReader(responseStream))
{
string responseString = streamread.ReadToEnd();
}
因此,与其一次读取一行,不如一次读取整个流。 希望对你有帮助。
作为问题解决方案的一部分,我需要进行不同的调用来实现它,而不是通过调用一次来循环它。