0

現在、ファイルシステム上のフォルダーを監視する C++ プログラムを実装しようとしています。アプリケーションを初期化すると、ディレクトリがスキャンされ、ディレクトリに関するメタ情報が保存されます。

プログラムがアクティブなときに何かが変更された場合、フォルダーへの変更を読み取ることができます (フォルダーまたはファイルの名前の変更など)。しかし、プログラムが実行されていない間は、ディレクトリへの変更を追跡できません。起動時に私は得るでしょう

Removed folder X
Added folder Y

それ以外の

Renamed folder X to Y

パス/名前以外の方法でディレクトリを識別することは可能ですか? はいの場合、C++ / Qt でその情報をどのように収集しますか?

4

3 に答える 3

1

車輪を再発明するのではなく、Qt ドキュメントに記載されているクラス QFileSystemWatcher を使用するだけです。

QFileSystemWatcher クラスは、ファイルとディレクトリの変更を監視するためのインターフェースを提供します

プログラムを常に実行したい場合は、サービス (Windows) またはデーモン (Linux / OSX) の作成を検討することをお勧めします。

于 2013-08-21T09:53:42.190 に答える
0

これはファイルシステム固有ですが、一般的に可能です。FAT は主な例外だと思います。ただし、C++ 標準ライブラリや Qt には、このコードはありません。あまりにも珍しいので、ファイルシステム固有ではない場合でも、OS 固有のコードが必要になります。

于 2013-08-21T11:02:30.930 に答える
0

TheDarkNight が言ったように、移植性などの問題を避けるために QFileSystemWatcher を使用する必要があります。しかし、アプローチを続けたい場合:
GNU/Linux ランドでは、ディレクトリの inode 構造体でこれを確認できます (シンボリック リンクの問題に注意してください)。inode 構造体にはインデックスがあります。たとえば、シェルで次のように取得できます。

ls -id /path/to/your/folder

inode にアクセスするための API があります。inode struct linux でググることができます。

Windows ガーデンでは、構造体BY_HANDLE_FILE_INFORMATIONでハンドルにアクセスすると、ファイル ID を取得できます。

nFileIndexHigh ファイルに関連付けられている一意の識別子の上位部分。詳細については、nFileIndexLow を参照してください。 nFileIndexLow ファイルに関連付けられている一意の識別子の下位部分。

于 2017-06-08T12:39:17.390 に答える