我想锁定现有文件以防止其他进程使用(读取和写入)。也就是说,此进程或任何其他进程随后尝试打开文件的任何尝试都应失败并出现“拒绝访问”错误。
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);
}
关于c++ - 独占打开文件/锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11897359/