我想锁定现有文件以防止其他进程使用(读取和写入)。也就是说,通过此进程或任何其他进程打开文件的任何后续尝试都应该失败并出现“拒绝访问”错误。
CreateFile WINAPI 函数有一个参数可以做到这dwShareMode
一点,我正在寻找类似的功能,同时仍然能够使用QFile
.
我想锁定现有文件以防止其他进程使用(读取和写入)。也就是说,通过此进程或任何其他进程打开文件的任何后续尝试都应该失败并出现“拒绝访问”错误。
CreateFile WINAPI 函数有一个参数可以做到这dwShareMode
一点,我正在寻找类似的功能,同时仍然能够使用QFile
.
我发现的一种方法是在打开文件后在底层操作系统句柄上使用LockFile 。
请注意,LockFile
它的行为略有不同 - 随后尝试打开成功,但实际读取或写入将失败并显示ERROR_LOCK_VIOLATION
.
#include <windows.h>
#include <io.h>
bool lockFile(QFile *file) {
return (bool) LockFile((HANDLE) _get_osfhandle(file->handle()), 0, 0, -1, -1);
}
void test() {
QFile f("test.txt");
f.open(QIODevice::ReadOnly);
lockFile(&f);
}
您是否尝试过使用 Notepad++ 保存(覆盖)?我相信正确的行为是它不会让你写入相同的文件名。打开(阅读)是不可强制执行的;写作才是真正的考验。