如何在本地和网络驱动器上检测Windows文件关闭

时间:2018-01-24 07:16:57

标签: winapi document-management

我正在使用基于Win32的文档管理系统,该系统采用自动签入/签出模型。它目前用于跟踪正在使用的文档的模型(监视打开文档的应用程序的过程)并不是特别强大,因此我正在研究替代方案。

检查很容易,因为DocMgt应用程序负责启动其他应用程序(Word,Adobe,记事本等)并将文档传递给它。

自动登记要求更加困难。当用户在Word / Adob​​e / Notepad中理想地关闭文档时,DocMgt系统将自动得到通知,因此它可以自动检入更新的文档。

为了使事情更复杂,文档可能存储在网络驱动器而不是本地驱动器上。

任何人都有关于API调用,技术或架构的任何提示来支持这种功能吗?

我不期待一个神奇的3线解决方案,到目前为止我所做的研究让我相信这远非一个微不足道的问题,需要一些重要的工作才能实现。我对所有建议感兴趣,无论他们是完全解决方案还是部分解决方案。

1 个答案:

答案 0 :(得分:0)

您所描述的是一项常见任务。这是完全可行的,尽管不是没有它的麻烦。在这里,我假设文件在您的代码可以运行的计算机上关闭(即使文件存储在已安装的网络共享上)。

使用文件时有两种控制文件的方法:过滤器和虚拟文件系统。

过滤器位于进程和文件系统之间的中间位置(任何文件系统,本地,网络或完全虚拟),并拦截转到此文件系统的文件请求。这里需要在计算机上运行过滤器代码,通过该代码传递请求(在您的方案中似乎满足此要求)。

虚拟文件系统是来自应用程序的请求的端点。实现虚拟文件系统时,您可以处理所有请求,因此您始终可以完全控制文件的生命周期。由于文件系统是虚拟的,您可以随意将文件保存在任何位置,包括真实磁盘(本地或网络),甚至是云端。

过滤器方法的好处是您可以控制驻留在真实磁盘上的单个文件,而虚拟文件系统只能安装到新驱动器盘符或NTFS驱动器上的空目录中,这并非总是如此fisible。同时,坐在中间,过滤器在某种程度上受限于它可以做什么,并且文件可以在过滤器未运行时被更改。最后,过滤器更复杂并且可能容易出错,因为它们位于中间并且必须与其他过滤器和端点一起使用。

我没有具体的建议,但如果选择单独的驱动器号,我会推荐虚拟文件系统。

我们公司开发(并继续为新所有者维护)两种产品,CBFS过滤器和CBFS Connect,它们允许您分别在用户模式下创建过滤器和虚拟文件系统。这些产品用于许多软件,包括一些文档管理系统(与您的工作很接近)。您可以在their website上找到这两种产品。