C#将MemoryStream转换为FileStream

pet*_*ski 6 c# memorystream stream filestream

我的代码是这样的:

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

后来我正在使用file.Name.

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

无法将类型为"System.IO.MemoryStream"的对象强制转换为"System.IO.FileStream".

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

Mar*_*ell 17

A MemoryStream与文件无关,并且没有文件名的概念.基本上,你不能这样做.

你当然不能在他们之间施放; 你只能向上向上 - 而不是向侧面; 可视化:

        Stream
          |
   ---------------
   |             |
FileStream    MemoryStream
Run Code Online (Sandbox Code Playgroud)

你可以通过类型检查MemoryStreamStream简单地转换为a 和a Stream到a MemoryStream; 但从来没有FileStream到过MemoryStream.这就像说狗是动物,大象是动物,所以我们可以把狗交给大象.

可以子类化MemoryStream并添加Name属性(您为其提供值),但是a FileStream和a 之间仍然没有共性YourCustomMemoryStream,并且FileStream没有实现预先存在的接口来获取Name; 因此调用者必须单独显式处理,或使用duck-typing(可能是通过dynamic或反射).

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


C.E*_*uis 5

您可以Stream与动物、MemoryStream狗和FileStream猫进行比较。虽然狗是动物,猫是动物,但狗肯定不是猫。

如果要将数据从一个流复制到另一个流,则需要创建两个流,从一个流读取并写入另一个流。