別のプロセスからの使用 (読み取りと書き込み) を防止するために、既存のファイルをロックしたいと考えています。つまり、このプロセスまたは他のプロセスによってファイルを開こうとする後続の試みは、「アクセスが拒否されました」というエラーで失敗するはずです。
CreateFile WINAPI関数には、まさにそれを行うパラメーターがあります..dwShareMode
を使用しながら同様の機能を探していますQFile
.
別のプロセスからの使用 (読み取りと書き込み) を防止するために、既存のファイルをロックしたいと考えています。つまり、このプロセスまたは他のプロセスによってファイルを開こうとする後続の試みは、「アクセスが拒否されました」というエラーで失敗するはずです。
CreateFile WINAPI関数には、まさにそれを行うパラメーターがあります..dwShareMode
を使用しながら同様の機能を探していますQFile
.
私が見つけた 1 つの方法は、ファイルを既に開いた後で、基礎となる OS ハンドルで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 ++で保存(上書き)してみましたか?正しい動作は、同じファイル名に書き込めないことだと思います。開く(読み取る)ことは強制できません。書くことは本当のテストです。