2011-06-03 49 views
18

我已经看到了这个术语,但我并不真正了解如何在内存中打开文件。如何在内存中打开文件?

我有文件写在磁盘上的临时位置,但这需要清理时,特定的窗体关闭,我不能做它打开时。这个文件夹必须清空。我想知道如果我在内存中打开文件,而不是它会有所作为?

+1

这完全取决于你在做什么。 – SLaks 2011-06-03 12:58:14

+0

我的缩略图显示在右侧 - 用户双击一个,它打开PDF文件。 – rik 2011-06-03 12:59:47

回答

41
MemoryStream inMemoryCopy = new MemoryStream(); 
using (FileStream fs = File.OpenRead(path)) 
{ 
    fs.CopyTo(inMemoryCopy); 
} 
// Now you can delete the file at 'path' and still have an in memory copy 
+0

dam it,我们正在使用.net 3.5,因此我无法使用fs.copyto – rik 2011-06-03 13:10:48

+0

您可以轻松地自行复制该CopyTo扩展方法。在这里搜索。 – 2011-06-03 13:13:20

+0

你的意思是搜索堆栈溢出复制到扩展方法? – rik 2011-06-03 13:24:57

2

可以使用DeleteOnClose参数FileStream构造的工作:

FileStream fs = new FileStream("<Path Here>", FileMode.Create, 
    FileAccess.ReadWrite, FileShare.None, 1024, FileOptions.DeleteOnClose); 

,关闭时文件将被删除。

2

我认为这意味着将该文件的内容作为一个整体读入内存,然后关闭与该文件的连接。假设它,这不是太大的文件,你可能只是读入一个byte []:

byte[] fileContent = File.ReadAllBytes(fileName); 

如果它是一个文本文件读入使用

string fileContent = File.ReadAllText(fileName); 

字符串一旦你做到了这一点使用StreamReader稍后阅读它,就像在磁盘上创建文件一样。