3

ファイルが読み取り用にユーザーによって開かれたかどうかを知りたい (ダブルクリックまたは ... で開く)、C++Windows で Qt Creator を使用してアプリケーションをコーディングしています。いくつかの調査の後、 QFileSystemWatcheを見つけましたが、特定のフォルダで変更が発生しました。

void QFileSystemWatcher::fileChanged ( const QString & path ) [signal] このシグナルは、指定されたパスにあるファイルが変更、名前変更、またはディスクから削除されたときに発行されます。

ファイルが開かれたかどうかを知る方法は? または、開いたり閉じたりするときにファイルを変更する方法はありますか?

任意のアイデアをお願いします!!!

4

1 に答える 1

0

2 つの解決策:

  • Qt の使用

次の関数 (疑似コード) を作成できます。

function is_open(file)
    handle = open file to write
    if(handle is ok)
        close file
        return true
    else
        return false

次に、1 秒に 1 回呼び出して、fileOpened(const QString& file)いつでも信号を発します。is_open(t-1) == false && is_open(t) == truet

ただし、このソリューションは遅くなる可能性があり、特にファイルが離れたサーバーにある場合は、io アクセスが肥大化する可能性があります。また、ディスク/SSD の摩耗が早まる可能性もあるため、この解決策はお勧めしません。

  • システム API の使用

すべてのプロセスのすべてのファイル ハンドルのリストを取得し、監視するファイルへのハンドルが含まれているかどうかを確認できます。繰り返しますが、これを毎秒 x 回行う必要があります。それはあなたのPCを遅くします; 実際には実際には移植可能ではなく (必要なコードはシステム固有の API に大きく依存します)、機能するには昇格された特権が必要になる場合があります。それもお勧めしません…

于 2012-10-11T21:48:35.783 に答える