我今天遇到了一个愚蠢的问题:
在我的项目中,我必须使用一个库(我无法替换),他的问题是我使用MemoryStream
而不是经常保存到HDD(因为有很多文件,他们尺寸很小,因此它非常适合MemoryStream
)。问题是库API是围绕文件系统访问构建的 - 其中一个函数只接受文件的直接路径。
如何仍然向该方法发送一个字符串(路径),这会产生一个新的FileStream
而不会实际触摸硬盘?
例如“\ MEMORY \ myfile.bin”?
答案 0 :(得分:1)
kernal.dll
以引用从您的路径到内存的I / O查询。 (也许这可能没有ring0访问 - 我不确定)。显然,最推荐的是使用反射器来修改给定的库。否则,我找不到适合你的解决方案。
在回复第一条评论时,您可以:
使用RAMDrive(一个分配系统内存的小块并将其显示为分区的程序)
答案 1 :(得分:1)
如果文件必须存在于磁盘上(并且只接受磁盘路径),则main选项是一个虚拟文件系统,它允许您将自定义数据公开为文件系统。有几个选项,例如现在死亡的Dokan,我们的Solid File System OS版和回调文件系统(参见我们的Virtual Storage产品系列的描述),也许Pismo File Mount可以工作(从未仔细研究过它)。
答案 2 :(得分:1)
这完全取决于库的构建方式。
如果它是使用FileStream
的100%托管库,则可能会卡住。
如果它使用提供的文件名并调用本机WIN32 CreateFile
函数,则可以为其提供除名称管道之类的文件之外的其他内容。
要快速测试是否可行,请将@"\\.\pipe\random_name"
传递给方法:如果它通过明确说明无法打开管道和文件名以\\.\
开头来回答,那么,抱歉。另一方面,如果它说它找不到文件,你就有机会使它工作。
然后,您可以创建NamedPipeServerStream
并使用与\\.\pipe\
前面的库方法调用相同的名称。
答案 3 :(得分:0)
您不能将其“表示”为文件,但可以使用StreamWriter
类将其“转换”为文件。