如何:将StreamReader内容保存在字符串中
我想在一个字符串中保存StreamReader内容.不幸的是,我不允许保存内容,因为对象似乎丢失了(来自FTP服务器).
错误信息GERMAN: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(); }
解决方法
如果检查从FtpWebResponse的GetResponseStream()方法返回的responseStream,您会注意到布尔属性
CanSeek为false.
以这种方式多次读取流将总是导致错误.在下一次调用ReadToEnd()之前,你应该先调用Seek(0,0).但是,在这种情况下,调用responseStream.Seek(0,0);会导致抛出NotSupportedException.
将结果分配给中间变量将起作用.也可以使用Using块而不是Close()方法:
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; using(FtpWebResponse response = (FtpWebResponse)request.GetResponse()) { using(Stream responseStream = response.GetResponseStream()) { using(StreamReader streamReader = new StreamReader(responseStream)) { string content = streamReader.ReadToEnd(); MessageBox.Show(content); textBox.Text = content; } } MessageBox.Show(response.StatusDescription); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。