【问题标题】:Convert MemoryStream to FileStream with C#? [closed]使用 C# 将 MemoryStream 转换为 FileStream? [关闭]
【发布时间】:2012-04-16 22:11:00
【问题描述】:

我正在处理一个接收 FileStream 的项目,它应该使用返回 MemoryStream 的方法接收它。

如何将 MemoryStream 转换为 FileStream? 我无法触及这些代码,这就是整个问题所在。

【问题讨论】:

  • 您能否展示一个示例,说明您需要调用的方法的签名以及您的输入内容。您的问题不清楚为什么需要这种转换。
  • @DarinDimitrov。您删除的答案看起来有效。你为什么删除它?
  • 因为我需要先了解 OP 在问什么。他的问题没有任何意义,我希望在发布真正的答案之前获得更多信息。
  • 我认为 OP 有一个像 void DoSomething(FileStream stream) 这样的 API,他无法更改。他想将它与MemoryStream 一起使用,大概不需要先将数据写入文件。
  • 如果是这种情况,那么他就无法做到这一点。 FileStream 是指向文件的指针。您不可能将在内存中创建的 MemoryStream 转换为 FileStream。这没有任何意义。他必须将这个 MemoryStream 的内容(他可能拥有)刷新到一个临时文件,然后将一个 FileStream 传递给这个文件到他的假定 API。

标签: c# filestream memorystream


【解决方案1】:

如果我正确理解您的问题,您有一个返回 MemoryStream 的方法,并且您需要将该流传递给采用 FileStream 的方法。我见过几个例子,当参数类型可能是 Stream 时,我的同事编写了带有 FileStream 参数的方法。这是一个很好的例子,说明为什么最好为参数使用派生较少的类型。

我能想到的唯一解决方案就是将内存流写入临时文件:为临时文件创建文件流,将内存流复制到文件流中,然后要么将位置设置为零,要么关闭流并在同一文件上打开一个新流,以传递给该方法。

如果我误解了你的问题,请澄清。

【讨论】:

    【解决方案2】:

    【讨论】:

    • using 声明想和你聊天:)
    • Ed,这是为了说明如何做,我相信他们会从这里开始并以最好的方式关闭/刷新 :)
    • 这会将 FileStream 转换为 MemoryStream,但问题是如何将 MemoryStream 转换为 FileStream。
    • Read 方法不一定会将 count 个字节读入缓冲区。需要反复调用,直到缓冲区被填满。
    • @BeenishKhan:我觉得你太信任了。它实际上需要更少个字符来做正确的事情,所以我不明白故意以错误的方式做事(是的,这是错误的,因为如果Read()SetLength()抛出你不这样做' t 清理您的流。这不等同于使用using 语句,它包含一个错误)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多