从WebResponse获取文件(在这种情况下为.PDF,但是任何文件都可以)并将其放入MemoryStream的最佳方法是什么?从WebResponse使用.GetResponseStream()获取一个Stream对象,但是如果要将该Stream转换为特定类型的流,该怎么办?

最佳答案

我在测试SoloBold的answer时遇到了一个严重问题。当使用它通过FtpWebRequest将文件读取为MemoryStream时,它间歇性地无法将整个流读取到内存中。我跟踪到Peek(),有时在前1460个字节后返回-1,即使Read()成功了(文件比这个大得多)。

相反,我提出以下解决方案:

MemoryStream memStream;
using (Stream response = request.GetResponseStream()) {
    memStream = new MemoryStream();

    byte[] buffer = new byte[1024];
    int byteCount;
    do {
        byteCount = stream.Read(buffer, 0, buffer.Length);
        memStream.Write(buffer, 0, byteCount);
    } while (byteCount > 0);
}

// If you're going to be reading from the stream afterwords you're going to want to seek back to the beginning.
memStream.Seek(0, SeekOrigin.Begin);

// Use memStream as required

09-15 23:00