我的代码是这样的:
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
-查看;但绝不是 FileStream
到 MemoryStream
。这就像说狗是动物,大象是动物,所以我们可以把狗投给大象。
您可以将 MemoryStream
子类化并添加一个 Name
属性(您为其提供一个值),但是它们之间仍然没有共同点一个 FileStream
和一个 YourCustomMemoryStream
,并且 FileStream
没有实现一个预先存在的接口(interface)来获取一个 Name
;因此调用者必须显式分别处理两者,或使用鸭子类型(可能通过动态
或反射)。
另一种选择(可能更简单)可能是:将数据写入临时文件;从那里使用 FileStream
;然后(稍后)删除该文件。
关于C# 将 MemoryStream 转换为 FileStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8297613/