7

別のプロセスからの使用 (読み取りと書き込み) を防止するために、既存のファイルをロックしたいと考えています。つまり、このプロセスまたは他のプロセスによってファイルを開こうとする後続の試みは、「アクセスが拒否されました」というエラーで失敗するはずです。

CreateFile WINAPI関数には、まさにそれを行うパラメーターがあります..dwShareModeを使用しながら同様の機能を探していますQFile.

4

2 に答える 2

2

私が見つけた 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);
}
于 2013-11-11T17:05:49.700 に答える
1

Notepad ++で保存(上書き)してみましたか?正しい動作は、同じファイル名に書き込めないことだと思います。開く(読み取る)ことは強制できません。書くことは本当のテストです。

于 2012-08-10T07:50:46.737 に答える