【发布时间】:2012-12-14 23:45:36
【问题描述】:
我可以将一些文件解密到内存中,然后在不使用硬盘的情况下将其用作普通文件吗?
更准确地说,我想解密一个包含一些敏感数据的 .mdb 文件,并像从磁盘加载一样对其进行操作,但 不使用临时文件。 我想也许我可以从解密的字节数组中做一个 File 对象或流(仍然必须计算代码),但是,问题是 OleDbConnection 从包含文件名的字符串加载数据。
让我们试着举个例子:
byte[] someArrayWithTheContentsOfAdotMDBFile = getDecryptedFile();
[...]
// 即使我将数组包装到文件或流中,加载过程也需要文件名
using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\"+ fileNameHere)) // can fileNameHere be a File object, stream or any trick like that??
编辑:由于答案采用这种方式,我将标题更改为“正在加载数据库......”。我仍然有兴趣从内存中加载任何文件类型,但让我们把它留给另一个线程
【问题讨论】:
-
我能想到的唯一能在一般意义上起作用的方法绝对不是微不足道的,即编写一个使用内存映射作为其存储区域的磁盘驱动程序。
-
有一天你会回顾这个问题并问自己:“我真的有那么年轻吗?”
-
两个思路:(1)建立一个命名管道,通过文件名读取。 (2) ram 磁盘将像任何其他磁盘一样出现在操作系统中。
-
@500-InternalServerError,我认为它没有帮助 - 它仍然是可见文件(只是没有写在磁盘上......)。目前尚不清楚什么是实际限制......即无论如何都由页面文件支持的内存......
-
@Dwright - 我查看了 MemoryStream,但即使我让它工作,引擎也需要一个字符串格式的文件名来加载。 msdn.microsoft.com/es-es/library/…