C# 将 MemoryStream 转换为 FileStream

标签 c# stream filestream memorystream

我的代码是这样的:

byte[] byteArray = Encoding.ASCII.GetBytes(someText);
MemoryStream stream = new MemoryStream(byteArray);
StreamReader reader = new StreamReader(stream);
FileStream file = (FileStream)reader.BaseStream;

稍后我使用 file.Name。

我得到一个 InvalidCastException:它显示如下

Unable to cast object of type 'System.IO.MemoryStream' to type 'System.IO.FileStream'.

我在某处读到我应该将 FileStream 更改为 Stream。还有什么我应该做的吗?

最佳答案

MemoryStream 不与文件关联,也没有文件名的概念。基本上,您不能那样做。

你当然不能在它们之间施法;您只能向上或向下 throw - 不能向侧面 throw ;可视化:

        Stream
          |
   ---------------
   |             |
FileStream    MemoryStream

你可以简单地将 MemoryStream 转换为 Stream,通过类型将 Stream 转换为 MemoryStream -查看;但绝不是 FileStreamMemoryStream。这就像说狗是动物,大象是动物,所以我们可以把狗投给大象。

可以MemoryStream 子类化并添加一个 Name 属性(您为其提供一个值),但是它们之间仍然没有共同点一个 FileStream 和一个 YourCustomMemoryStream,并且 FileStream 没有实现一个预先存在的接口(interface)来获取一个 Name;因此调用者必须显式分别处理两者,或使用鸭子类型(可能通过动态或反射)。

另一种选择(可能更简单)可能是:将数据写入临时文件;从那里使用 FileStream;然后(稍后)删除该文件。

关于C# 将 MemoryStream 转换为 FileStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8297613/

相关文章:

c++ - 如何在 C++ 中使用文件流将无符号 __int8 数组正确读取和写入二进制文件

delphi - Delphi 中的文件流 - 最佳缓冲区大小

c# - 关于单元测试和犀牛模拟的一些问题

c# - MVC 和 WebAPI 网站中的身份验证

dart - future 返回空列表

ios - 通过 IOS 将多个图像发送到 chromecast 会导致闪烁

swift - 在 Swift 中覆盖文件中的前 N ​​个字节

sql-server - 如何完成删除文件流和所有附加文件

c# - 尝试将项目和值添加到 asp.net 中的下拉列表时出错

c# - 如何将文件读入保留 CR/LF 的字符串?