c#将内存流转换为文件流



我的代码是:

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。我还需要做些什么吗?

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

你当然不能在它们之间转换;你只能向上或向下投,而不能向旁边投;想象:

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

可以简单地将MemoryStream转换为Stream,通过类型检查将Stream转换为MemoryStream;但从来没有FileStreamMemoryStream。这就像说狗是一种动物,大象也是一种动物,所以我们可以把狗扔给大象。

可以子类MemoryStream并添加Name属性(您为其提供值),但FileStreamYourCustomMemoryStream之间仍然没有共性,并且FileStream没有实现预先存在的接口来获得Name;所以调用者必须显式地分别处理两者,或者使用duck-typing(可能通过dynamic或反射)。

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

你可以将Stream比作动物,MemoryStream比作狗,FileStream比作猫。虽然狗是一种动物,猫也是一种动物,但狗肯定不是猫。

如果你想把数据从一个流复制到另一个流,你需要创建两个流,从一个流读到另一个流写。

不允许此操作。FileStreamMemoryStream都直接派生自Stream,因此它们是兄弟类型。通常,在以下场景中:

 public class A { }
 public class B : A { }
 public class C : A { }

不可能将B强制转换为C,反之亦然。B和c之间不存在"是-是"关系。

相关内容

  • 没有找到相关文章

最新更新