打开文件专用/锁定文件

时间:2012-08-10 07:38:44

标签: c++ windows qt qfile

我想锁定现有文件以防止从另一个进程使用(读取和写入)。也就是说,此进程或任何其他进程打开文件的任何后续尝试都将失败,并显示“拒绝访问”错误。

CreateFile WINAPI函数有一个dwShareMode参数就是这样做的,我正在寻找类似的功能,同时仍能使用QFile

2 个答案:

答案 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 ++保存(覆盖)?我相信正确的行为是它不会让你写相同的文件名。开放(阅读)是不可执行的;写作是真正的考验。