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

时间:2014-07-22 20:13:41

标签: c# wpf string ftp streamreader

如何:将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();
    }

1 个答案:

答案 0 :(得分:1)

如果您检查responseStream的{​​{1}}方法返回的GetResponseStream(),您会注意到布尔属性CanSeek为false。

以这种方式多次读取流总是会导致错误。在完成对FtpWebResponse的下一次调用之前,您应先调用ReadToEnd()。但是,在这种情况下,调用Seek(0,0)会导致responseStream.Seek(0, 0);被抛出。

将结果分配给中间变量一定会有效。也可以使用NotSupportedException块而不是Using方法:

Close()