2010-10-15 78 views
0

我有一个流对象,我有一些文档,我知道它是什么文档,我怎样才能打开该文档,而不必将其保存到物理文件中。所以我想直接从流本身打开文档而不保存它。阅读流并打开该文档

如何做到这一点?我在c中执行它#

+3

这是什么类型的文件?你如何“打开”它?什么阻止你将文件保存到临时目录? – Jens 2010-10-15 12:03:56

+0

如果你不告诉我们,我们不知道你有什么文件。这使得很难找到解决方案。 – 2010-10-15 12:07:59

+0

现在让它成为PDF文档 – Nits 2010-10-15 12:11:41

回答

0

这是我如何做这样的事情,但我知道文件的名称。

private void LoadAttachment() 
    { 
      byte[] ImageData = ... get data from somewhere ... 

      Response.Buffer = true; 
      String filename = "itakethis.fromdatabase"; 
      Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); 
      Response.ContentType = GetMimeType(filename);//you can try to extrapolate it from file extension 
      if(ImageData.Length > 0) 
       Response.BinaryWrite(ImageData); 
      else 
       Response.BinaryWrite(new byte[1]); 
      Response.Flush(); 
      ApplicationInstance.CompleteRequest(); 
    } 

`

+0

这里有一些有用的东西,但是OP询问'Stream'而不是'byte []',并且既然你检查了'.Length',你的解决方案将不会被翻译。 – 2010-10-15 16:19:15

+0

@Kirk Woll,对不起,我的错,我认为问题是物理上保存文件,而不是直接使用流。无论如何,流有一个长度属性。如果问题是直接使用流,那么答案是否定的:bynarywrite以字节数组为参数 – 2010-10-18 07:58:41

0

不幸的是,大多数程序(Word,Excel,记事本,...)需要一个文件名来打开一个文件。所以我认为你的问题没有真正的解决方案。

唯一的想法是编写一个File System Filter Driver,它返回一个虚拟文件名的MemoryStream,但该驱动程序必须用C++编写,并不是最简单的一个。

0

你为什么不能保存,这是方法被调用到一个空aspx页面(我的意思是,没有任何形式的HTML标记除了< @Page ... />行)文件?

我以前用GetTempFilename效果很好。我不记得它在哪一类,可能是System.EnvironmentFile本身。无论如何,您可以确定该文件将位于系统定义的临时文件夹中,因此您可以在完成该文件后安全地删除该文件。