繁体   English   中英

MFC C ++:如何锁定仅在过程中使用的文件?

[英]MFC C++: how can I lock a file to be used only in my process?

我想锁定几个只供我的进程使用的文件,在程序运行时拒绝任何其他应用程序访问这些文件。 当然,我知道我可以使用Createfile来独占访问文件,但是我的应用程序工作方式不同,我从配置中读取了一堆文件名,并使用链接到我的应用程序的Lib处理这些文件,即我的功能之一。 lib访问文件,但是我没有得到filoehandle或类似的东西作为回报。

因此,我想实现的是,当我的应用程序正在处理这些文件时,没有其他应用程序可以修改它们。 这可能吗? 我正在Visual Studio 8中使用MFC进行开发。

我从未使用过它们,但是LockFile/LockFileEx文档说: 锁定指定的文件以供调用进程进行独占访问。

您需要操作系统的合作,因为这是影响其他流程的唯一方法。

操作系统要求您使用句柄来引用文件。 这实际上是操作系统的唯一实用方法。 使用路径名太复杂了。 因此,您将需要调用CreateFile 此时,只需请求独占访问即可。

为什么CreateFile()的独占标志无法实现此目的? 看起来您不需要任何花哨的东西。 如果您的库使用CFile :: shareDenyRead和CFile :: shareDenyWrite打开文件,则其他任何进程都无法读取您的文件,只要它们由您的库打开即可。

您的要求无法完成。

因为排他访问是按句柄而不是按进程授予的,所以如果一次打开一个具有排他访问权限的文件,则以后每次打开该文件的尝试都会失败,即使该文件来自同一进程。 这里的独占访问意味着您的句柄是唯一有效的句柄,而不是只有您的进程才能访问它。

因此,即使您锁定了文件,您的lib也将无法打开它,因此对您来说毫无用处。 唯一的方法是锁定文件并将句柄传递给您的lib,您不能这样做,因为您的lib需要文件名。 同样,由lib打开文件后,您将无法锁定它,因为它不会为您提供句柄。 如果您无权访问该库的源代码,那么您将陷入困境。

您可以尝试使用具有用户权限的方法来进行操作,让进程从其自己的用户帐户运行,并更改将要修改的文件的所有权,然后在完成后将其更改回去。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM