C#铸造的MemoryStream对FILESTREAM
我的代码是这样的:C#铸造的MemoryStream对FILESTREAM
byte[] byteArray = Encoding.ASCII.GetBytes(someText);
MemoryStream stream = new MemoryStream(byteArray);
StreamReader reader = new StreamReader(stream);
FileStream file = (FileStream)reader.BaseStream;
后来我使用file.Name。
我得到一个InvalidCastException:它会显示如下
无法转换类型“System.IO.MemoryStream”的对象键入“System.IO.FileStream”。
我在某处读到我应该将FileStream更改为Stream。有什么我应该做的吗?
A MemoryStream
与文件没有关联,并且没有文件名的概念。基本上,你不能那样做。
你当然不能在它们之间施放;你只能向下倾斜 - 而不是侧身;可视化:
Stream
|
---------------
| |
FileStream MemoryStream
您可以通过投下MemoryStream
到Stream
平凡和Stream
到MemoryStream
类型检查;但从来没有FileStream
到MemoryStream
。这就像说狗是动物,而大象是动物,所以我们可以把狗给大象。
您可以子MemoryStream
并添加Name
属性(您提供一个值),但仍然会有一个FileStream
和YourCustomMemoryStream
和FileStream
之间没有共性没有实现预先存在的接口得到一个Name
;因此呼叫者必须分别处理明确或使用鸭子键入(也许通过dynamic
或反射)。
另一种选择(可能更简单)可能是:将数据写入临时文件;从那里使用FileStream
;然后(稍后)删除该文件。
该操作是不可能的。 FileStream
和MemoryStream
都直接来自Stream
,所以它们是兄弟类型。通常,在以下情况下:
public class A { }
public class B : A { }
public class C : A { }
无法将B投射到C或反之亦然。 B和C之间没有“is-a”关系。
您可以比较Stream
与动物,MemoryStream
与狗和FileStream
与猫。虽然狗是动物,猫是动物,但狗当然不是猫。
如果您想将数据从一个数据流复制到另一个数据流,则需要创建两个数据流,从一个数据流读取数据并写入另一个数据流。
这种方法是错误的。你想达到什么目的? – Snowbear
目前还不清楚你想要做什么。一个'MemoryStream'绝对不能转换为'FileStream',并且当你可以转换为'Stream'时,该类没有'.Name'属性。你想要做什么?你以后哪个名字? –