Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
响应与C#中文件的交互?_C#_File - Fatal编程技术网

响应与C#中文件的交互?

响应与C#中文件的交互?,c#,file,C#,File,我想写一个程序来加密整个文件夹和它的子文件夹,我这样做没有问题,但我想让用户双击它并打开它,就像它没有加密一样,让整个加密过程变得相当透明,假设它是一张图片还是一个word文档,并在各自的应用程序中打开 我的一个正在运行的程序如何得到打开目标文件的通知,停止打开文件,做它需要做的事情(解密),然后运行得到的解密文件 如何在C#中查看文件并执行此操作?我是否可以监视其他交互,如用户复制监视的文件(因为它不在监视的文件夹中,所以应该对其进行解密,即将其拖到USB设备),或者删除监视的文件(例如,如果

我想写一个程序来加密整个文件夹和它的子文件夹,我这样做没有问题,但我想让用户双击它并打开它,就像它没有加密一样,让整个加密过程变得相当透明,假设它是一张图片还是一个word文档,并在各自的应用程序中打开

我的一个正在运行的程序如何得到打开目标文件的通知,停止打开文件,做它需要做的事情(解密),然后运行得到的解密文件

如何在C#中查看文件并执行此操作?我是否可以监视其他交互,如用户复制监视的文件(因为它不在监视的文件夹中,所以应该对其进行解密,即将其拖到USB设备),或者删除监视的文件(例如,如果我想在删除前撕碎文件)


另外,FileSystemWatcher不能完全满足我的需要编辑:我的意思是FileSystemWatcher会告诉我文件何时被打开、删除以及所有这些事件,但它不会让我快速介入、解密文件并将其返回到通常打开该文件的进程。

您使用的是Windows吗?如果是,为什么不使用内置BitLocker

请参阅此链接:


如果您正在考虑BitLocker的竞争应用程序,请添加评论,因为我也可以为您指出这一方向。

与其尝试重新发明轮子,不如使用NTFS文件加密。您可以加密单个文件或整个文件夹或驱动器。此外,它对用户完全透明,并且完全按照您的要求执行(例如,复制到UBS驱动器时自动解密等)。只需使用
System.IO.File.Encrypt(string)
-没有比这更简单的了。

这在C#中是不可能的。最基本的要求是在NtCreateFile、NtOpenFile等上使用用户模式挂钩。在C#中无法实现这一点。由于内核模式代码可能试图访问您的文件,这甚至无法正常工作。正确的方法是编写一个I/O微型过滤器(当然是C语言)


编辑:如果你真的很绝望,试试EasyHook——它允许你从C#钩住函数。虽然我还没有尝试过,但挂接诸如NtCreateFile之类的重要函数似乎有风险。此外,您还需要相当多的本地API知识。

您可以重命名文件,将其添加到自己的扩展名中,如picture.jpg.encrypted。将您的程序设置为此扩展的默认程序,并处理打开它们的操作

您不能从用户模式执行此操作

不幸的是,要做到这一点,唯一的方法就是编写一个微型过滤器驱动程序。Minifilter驱动程序允许您拦截对文件的IO请求,然后可以动态加密/解密您关心的文件

这听起来很简单,但加密微过滤器驱动程序非常、非常、难以正确使用。您将不得不对文件对象进行阴影处理,这是一个真正的挑战。请访问www.osr.com,他们有大量关于做你想做的事情的信息


如果您选择这样做,我建议您购买一份VMWare Workstation并下载VirtualKD。它可以让你在虚拟机中以接近火线的速度进行调试。我将从x64 Win7开始,首先让远程共享工作。

您好,我认为您可以通过告诉FileSystemWatcher如何不能满足您的需要,以及更清楚地描述您的目标:您是否希望看到与“正常”文件夹完全相同的文件夹和子文件夹,当您最终打开显示文件的文件夹或子文件夹时,您希望看到标准文件名和扩展名(如果您启用了显示扩展名):换句话说,生成的外观和行为与标准的“资源管理器”行为完全相同,最终用户没有任何可视线索表明已执行加密?BitLocker可在驱动器、卷上工作,具有硬件和软件(OS)要求;它不是加密文件夹/文件的合适工具。不管怎样,我都想使用我的加密并在安全套件中编写我自己的功能。我写这篇文章不是因为我相信以前没有人做过。这不允许我使用自己的加密。我已经在这个加密上工作了3年,我正在为它开发一个安全套件。我也在发表一篇论文供同行评议。@Corey Ogburn您应该在主要帖子中提到,您的目标是使用自己的算法而不是系统默认值进行透明文件加密。这可能是我必须要做的。或者他甚至可以编写一个驱动程序来公开虚拟加密驱动器,就像TrueCrypt一样().