在.NET中模拟硬盘

时间:2020-03-06 14:46:08  来源:igfitidea点击:

有没有一种方法可以在.NET中模拟磁盘驱动器,从而拦截读取/写入/锁定操作?
我想用类似于C#中的GMail Drive的前端创建一些东西。

谢谢,
汤姆

解决方案

我为此目的亲自使用了Eldos回调文件系统,但是尽管它很好,但并不便宜。

也有一些免费/便宜的项目,而且我敢肯定,最近有一个类似的问题提到了其中的一个,不过目前还找不到。但是,由于分层Windows文件系统驱动程序并非易事,因此稳定性往往是一个主要问题。

并非完全如此.Net位于操作系统功能(如磁盘访问)之上,为我们提供托管文件访问器之类的功能。我们可以将所有内容都写入托管C#中,但是我们需要进行非托管调用才能使OS像其他驱动器一样对待。

所有的Shell扩展程序都是COM:http://msdn.microsoft.com/en-us/library/cc147467(VS.85).aspx

但是,我们可以编写一个.Net桌面应用程序,该应用程序允许从资源管理器中拖放,并且看起来像文件系统视图。

在Linux上,我们可以使用Mono.Fuse API(http://www.jprl.com/Projects/mono-fuse.html)来通过用户界面代码实现基于.NET的文件系统。

我们可以看到http://www.truecrypt.org/的工作方式。通过使用文件,使用驱动器或者分区来实现此目的。然后将文件挂载为真实驱动器。现在,可能源代码有点复杂;)

我们也可以将EZNamespaceExtension用于.NET。这使我们可以与Windows资源管理器集成。鉴于许可证是针对每个开发人员而不是分发的,因此价格不太昂贵。

更新
EZNamespaceExtension.NET的大问题。它已经很久没有更新了。 LogicNP似乎对EZNamespaceExtension.NET失去了兴趣,因为自2010年以来就没有发布带有新功能的版本。不支持.NET 4,也不支持Windows 8功能区工具栏。