【问题标题】:How to open a file from Memory Stream如何从 Memory Stream 打开文件
【发布时间】:2011-06-04 11:58:35
【问题描述】:

是否可以直接从 MemoryStream 打开文件而不是写入磁盘并执行 Process.Start() ?特别是pdf文件?如果没有,我想我需要将MemoryStream 写入磁盘(这有点烦人)。那么有人可以向我指出有关如何将MemoryStream 写入磁盘的资源吗?

【问题讨论】:

  • (James - 我从答案中删除了 4.0 依赖项)

标签: c# file file-io memorystream


【解决方案1】:

这取决于客户端 :) 如果客户端会接受来自标准输入的输入,您可以将数据 推送 到客户端。另一种可能性可能是编写命名管道服务器或套接字服务器 - 这不是微不足道的,但它可能会起作用。

但是,最简单的选择是获取一个临时文件并写入该文件(然后删除)。

var file = Path.GetTempFileName();
using(var fileStream = File.OpenWrite(file))
{
    var buffer = memStream.GetBuffer();
    fileStream.Write(buffer, 0, (int)memStream.Length);
}

完成后记得清理文件。

【讨论】:

  • 或使用WriteTo(非4.0)
  • @Magnus - 我删除了它;意识到我可以使用 MemoryStream 的后台缓冲区
【解决方案2】:

Path.GetTempFileName() 返回带有“.tmp”扩展名的文件名,因此您不能使用需要通过扩展名关联 Windows 文件的 Process.Start()。

【讨论】:

    【解决方案3】:

    如果打开文件是指为 PDF 文件启动 Adob​​e Reader,那么是的,您必须将其写入文件。也就是说,除非应用程序为您提供了一些 API,否则请这样做。

    将流写入文件的一种方法是:

    using (var memoryStream = /* create the memory stream */)
    using (var fileStream = File.OpenWrite(fileName))
    {
        memoryStream.WriteTo(fileStream);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2021-05-02
      相关资源
      最近更新 更多