将MemoryStream数组转换为fileStream C#

本文关键字:fileStream 转换 MemoryStream 数组 | 更新日期: 2023-09-27 18:22:35

我有一个函数正在返回MemoryStream数组,我想将这个内存流数组转换为FileStream对象。

如果可以的话,你能提供一种方法吗。。。

谢谢A.S

将MemoryStream数组转换为fileStream C#

您不能"转换"流,因为MemoryStreamFileStream是非常不同的东西。但是,您可以将MemoryStream的全部内容写入一个文件。有一种CopyTo方法可以用于此:

// memStream is the MemoryStream
using (var output = File.Create(filename)) {
    memStream.CopyTo(output);
}

文件流对象将打开的文件(来自磁盘)表示为流。内存流将内存的一个区域(字节数组)表示为一个流。因此,您不能真正将内存流直接转换为文件流,至少不能简单地将转换为

你可以采取两种方法:

  1. OFFLINE:完全消耗内存流的内容,并将其全部写入磁盘上的文件;然后将该文件作为文件流打开

  2. ONLINE:扩展FileStream类,创建一个适配器,该适配器将封装MemoryStream对象并将其公开为FileStream(本质上充当转换器)

其中一个被标记为[OFFLINE]的原因是,在将其输出到文件之前,您需要填充内存流的内容(一旦这样做,对文件流的修改将不会影响内存流;对内存流的更改(如新数据)也不会对文件流可用)

第二个标记为[ONLINE],因为一旦创建适配器并从MemoryStream初始化FileStream对象,就可以使用FileStream适配器对象处理MemoryStream中的任何新数据。您基本上可以使用文件流作为内存流之上的层来读取/写入和查找内存流。大概,这就是你想要做的。

当然,这取决于你需要做什么,但我倾向于第二个[在线]版本,认为它在一般意义上更好。