1

在delphi上我发现我可以像这样锁定一个文件:

aHandle     := CreateFile(PChar(aFileName),GENERIC_READ, 0, nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); // get the handle of the file
aFileSize   := GetFileSize(aHandle,nil); //get the file size for use in the  lockfile function
Win32Check(LockFile(aHandle,0,0,aFileSize,0)); //lock the file

但是有没有办法让文件保持锁定直到下次重新启动而不让应用程序运行到那时

4

1 回答 1

3

哇,我会对这个用例感兴趣!

如果您真的想保持文件锁定,您可能只需要保持应用程序运行。

但是,最好退回到您尝试解决的实际问题,而不是提出解决方案。假设解决方案必须采取特定形式的人通常不考虑所有选项而对自己不利。

如果您的意图是阻止人们修改文件,最好使用权限来执行此操作,因为无论程序是否在任何给定时间锁定文件,这都会起作用。

但是,如果你必须这样做并且你想防止人们杀死你的应用程序来解锁文件,你可以使用RobinHood/FriarTuck 方法使其更“安全”。

让一个程序(Robin)锁定文件并启动第二个程序(Tuck)。如果在任何时候 Tuck 退出,让 Robin 立即重新启动它。

同样,Tuck 将跟踪 Robin 的状态,并在它退出时立即重新启动它。

这绝不是完全安全的,但它严重减少了可以修改文件的窗口,因为 Robin 和 Tuck 相互保护。

它也是邪恶的,所以你可能想在释放它之前确定你想要这个功能。

于 2013-02-27T03:12:15.967 回答