如何:将StreamReader内容保存在字符串中
我正在尝试在字符串中保存StreamReader
内容。不幸的是,我不允许保存内容,因为对象似乎丢失了(来自FTP服务器)。
错误讯息德语: Auf das verworfene Objekt kann nicht zugegriffen werden。 Objektname:“System.Net.Sockets.NetworkStream”。
错误消息ENGLISH:无法访问抛弃对象。对象名:“System.Net.Sockets.NetworkStream”。
StreamReader streamReader = new StreamReader(responseStream);
string text = streamReader.ReadToEnd();
错误来自第2行。
修改
public void DownloadFileWithFtp()
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://XYZ.bplaced.net/Testumgebung/Texte/" + comboBox_DataPool.SelectedValue);
request.Credentials = new NetworkCredential("BN", "PW");
request.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream);
MessageBox.Show(streamReader.ReadToEnd());
//textBoxText = streamReader.ReadToEnd();
streamReader.Close();
MessageBox.Show(response.StatusDescription);
response.Close();
}
答案 0 :(得分:1)
如果您检查responseStream
的{{1}}方法返回的GetResponseStream()
,您会注意到布尔属性CanSeek为false。
以这种方式多次读取流总是会导致错误。在完成对FtpWebResponse
的下一次调用之前,您应先调用ReadToEnd()
。但是,在这种情况下,调用Seek(0,0)
会导致responseStream.Seek(0, 0);
被抛出。
将结果分配给中间变量一定会有效。也可以使用NotSupportedException
块而不是Using
方法:
Close()