StreamReader对象自动处理

时间:2015-12-07 12:35:28

标签: c# .net exception streamreader

我遇到了一个奇怪的错误。

我需要从今天上传的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'.

请帮帮我。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

作为问题解决方案的一部分,我需要进行不同的调用来实现它,而不是通过单次调用来循环它。

答案 1 :(得分:-1)

您可以尝试以下内容,

 using (StreamReader streamread = new StreamReader(responseStream))
 {
      string responseString = streamread.ReadToEnd();
 }

因此,不要一次读取一行,而是一次读取整个流。 希望它有所帮助。