0

QFileSystemWatcher を使用してディレクトリを再帰的に監視しています。また、サブディレクトリが監視されている場合、プログラムまたは手動で親ディレクトリの名前を変更/削除することはできません。

システムを介して手動で名前を変更しようとすると、「そのフォルダー/ファイルが別のプログラムで開かれているため、アクションを完了できません」というメッセージボックスが表示され、プログラムで名前を変更すると失敗します。

これらの同様のバグがありますが、解決策はありません:

http://qt-project.org/forums/viewthread/10530

https://bugreports.qt-project.org/browse/QTBUG-7905

私は見ていません。そして..上記のリンクで述べたように、それでもディレクトリはロックされています。

プログラムで名前を変更する場合.. 回避策を試しました: 1. 親の名前を変更する前に、ウォッチャーからすべてのサブディレクトリ パスを削除します。2. 親の名前を変更します。3. サブディレクトリ パスを再度追加します。

しかし、ここでも私のプログラムは最初のステップで失敗します。QFileSystemWatcher::removePath() は、サブディレクトリ パスを削除しようとすると false を返し、QFileSystemWatcher::directories() は、監視されているパス内のそのディレクトリを示します。ここに投稿されたものと同じhttps://bugreports.qt-project.org/browse/QTBUG-10846

ここで手順 1 が失敗したため、手順 2 も失敗し、親ディレクトリの名前を変更できません。

Qt5.2.1 と Windows 7 を使用しています。

解決策を教えてください。

4

1 に答える 1

0

ここで説明されているように、これは QFileSystemWatcher のバグです。

何日も試行錯誤した結果、Win32 API を使用して Windows プラットフォームのディレクトリを監視することで、ようやく問題の解決策を見つけることができました。Win32 Api を使用してディレクトリの変更を監視する方法に関するブログ記事を書きました。リンクを共有して、ここにたどり着いた他の人が同じ問題の解決策を見つけるのに役立つようにしたいと思います. ディレクトリの変更を監視する Win32 API

于 2014-09-26T07:22:48.337 に答える