我想锁定现有文件以防止从另一个进程使用(读取和写入)。也就是说,此进程或任何其他进程打开文件的任何后续尝试都将失败,并显示“拒绝访问”错误。
CreateFile WINAPI函数有一个dwShareMode
参数就是这样做的,我正在寻找类似的功能,同时仍能使用QFile
。
答案 0 :(得分:2)
我找到的一种方法是在打开文件后在底层操作系统句柄上使用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);
}
答案 1 :(得分:1)
您是否尝试使用Notepad ++保存(覆盖)?我相信正确的行为是它不会让你写相同的文件名。开放(阅读)是不可执行的;写作是真正的考验。