加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何:将StreamReader内容保存在字符串中

发布时间:2020-12-15 22:06:18 所属栏目:百科 来源:网络整理
导读:如何:将StreamReader内容保存在字符串中 我想在一个字符串中保存StreamReader内容.不幸的是,我不允许保存内容,因为对象似乎丢失了(来自FTP服务器). 错误信息GERMAN:Auf das verworfene Objekt kann nicht zugegriffen werden. Objektname:“System.Net.So
如何:将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);
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读