ファイルサイズが更新されたときに、ディレクトリの変更を監視するDispatchSourceは呼び出されません

モハク

ディレクトリのグループ内のファイルをそれぞれのサイズとともに一覧表示するUITableViewControllerのサブクラスを作成しました。また、これらのディレクトリに変更があった場合は、それ自体を更新します。このクラスはDispatchSource、ディレクトリを「監視」するために使用します。これを行うコードは次のとおりです。

    for dir in directories {
        let fd = dir.withUnsafeFileSystemRepresentation { (filenamePointer) -> Int32 in
            // vfw_open is a wrapper function for open()
            return vfw_open(filenamePointer, O_EVTONLY)
        }

        guard fd != 0 else {
            return
        }

        let watcher = DispatchSource.makeFileSystemObjectSource(fileDescriptor: fd,
                                                                 eventMask: DispatchSource.FileSystemEvent.write,
                                                                 queue: DispatchQueue.global(qos: .utility))

        watcher.setEventHandler { [weak self] in
            DispatchQueue.main.async {
                self?.updateFileList()
            }
        }

        watcher.setCancelHandler() {
            close(fd)
        }

        watcher.resume()
    }

このコードは基本的に各ディレクトリにウォッチャーを追加し、updateFileList変更が観察されたときに呼び出しますそれは完全に機能し、私のファイルリストは変更があればほぼ瞬時に更新されます。問題は、大きなファイルをディレクトリにコピーするupdateFileListと、すぐに呼び出されることです。そのため、私のコントローラーは新しいファイルのサイズを0バイトとして表示します。ただし、ファイルが完全にコピーされた後updateFileList呼び出されないため、ファイルの実際のサイズは更新されません。更新するファイルサイズを取得するにはどうすればよいですか?

ロブネイピア

ウォッチャーをディレクトリに追加すると、ディレクトリ内のファイルではなく、ディレクトリ自体が監視されます。ディレクトリは単なるファイルのリストです。そのリストが変更されると(ファイルが作成、削除、または移動されたり、移動されたりすると)、ディレクトリが変更され、ウォッチャーが呼び出されます。ファイルの内容を変更しても、ディレクトリは変更されません。

ファイルへの変更を監視するには、ファイルのウォッチャーを追加する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

inotifyを使用して、ディレクトリ全体を監視せずに、作成される特定のファイルを監視できますか?

分類Dev

ファイルが変更されたときに、ディレクトリのmtimeとctimeが変更されるのはなぜですか?

分類Dev

ファイルまたはディレクトリが変更されたときにシェルスクリプトを実行する方法

分類Dev

ファイルが変更されたときに監視コマンド (または他の方法) を使用してサービスを停止する

分類Dev

ディレクトリ内のファイルがいつタッチされた(開いた、閉じた、変更された)かを監視するにはどうすればよいですか?

分類Dev

ディレクトリが変更されるたびにSystemdサービスを自動的に再起動します(その中のファイル)

分類Dev

最大サイズを超えたときにファイルを削除するファイルディレクトリを監視するクラスのクラスおよびインスタンス変数の命名提案

分類Dev

Gruntは、変更されたファイルのみを監視しません

分類Dev

「ディレクトリを削除できません」という表示が表示されずに、ディレクトリ内のすべてのファイルを削除しますが、サブディレクトリは削除しません

分類Dev

UNIXディレクトリを監視する方法とディレクトリ内に新しいファイルがある場合は別のディレクトリにコピーされます

分類Dev

過去1時間に宛先のファイルが変更されたファイルを無視して、あるディレクトリから別のディレクトリにファイルをコピーしますか?

分類Dev

サイズ変更された演算子delete []が呼び出されることはありません

分類Dev

ディレクトリ「パス」は存在しません。ファイル変更の監視を開始できませんでした

分類Dev

タイムスタンプが変更されたすべてのファイルとサブディレクトリを再帰的に一覧表示します

分類Dev

監視ディレクトリにSFTP経由でアップロードされたすべてのファイルがJava7経由で使用できることを確認するにはどうすればよいですか?

分類Dev

外部ファイルから呼び出したときにcropphpを使用して画像のサイズを変更すると、オンラインサーバーに画像が表示されないという問題があります。

分類Dev

ディレクトリ内のすべてのファイルのアクセス許可を、新しいファイルが追加されたときにデフォルト値に変更するにはどうすればよいですか?

分類Dev

呼び出された(ネストされた/内側の)バッチファイル用に、呼び出し側(外側)のバッチファイルの作業ディレクトリを保持するにはどうすればよいですか?

分類Dev

.shから呼び出されたときにcppソースファイルをデバッグするときにブレークポイントを見つけることができません

分類Dev

debianパッケージがインストールされたときに変更されたファイルまたはディレクトリを特定するにはどうすればよいですか?

分類Dev

監視対象のファイルが変更されるたびに、chokidarの速度が低下します

分類Dev

特定の期間に作成されたディレクトリからファイルを削除することはできません

分類Dev

Javaを呼び出すときに「そのようなファイルまたはディレクトリはありません」

分類Dev

新しいファイルのパスを出力するディレクトリに作成された新しいフォルダを監視します

分類Dev

モバイルでフォントのサイズを変更するために@mediaクエリを機能させることができません

分類Dev

監視可能なコレクション内のアイテムが変更されたときに、現在のクラスプロパティを更新します

分類Dev

あるディレクトリから別のディレクトリにファイルを再帰的に対処すると、あるディレクトリの変更が別のディレクトリファイルにも反映されますか?

分類Dev

キーボードを開いたときにフラグメントのあるアクティビティのサイズは変更されません

分類Dev

ファイルが特定のディレクトリに配置されると、ファイルの名前が自動的に変更されます

Related 関連記事

  1. 1

    inotifyを使用して、ディレクトリ全体を監視せずに、作成される特定のファイルを監視できますか?

  2. 2

    ファイルが変更されたときに、ディレクトリのmtimeとctimeが変更されるのはなぜですか?

  3. 3

    ファイルまたはディレクトリが変更されたときにシェルスクリプトを実行する方法

  4. 4

    ファイルが変更されたときに監視コマンド (または他の方法) を使用してサービスを停止する

  5. 5

    ディレクトリ内のファイルがいつタッチされた(開いた、閉じた、変更された)かを監視するにはどうすればよいですか?

  6. 6

    ディレクトリが変更されるたびにSystemdサービスを自動的に再起動します(その中のファイル)

  7. 7

    最大サイズを超えたときにファイルを削除するファイルディレクトリを監視するクラスのクラスおよびインスタンス変数の命名提案

  8. 8

    Gruntは、変更されたファイルのみを監視しません

  9. 9

    「ディレクトリを削除できません」という表示が表示されずに、ディレクトリ内のすべてのファイルを削除しますが、サブディレクトリは削除しません

  10. 10

    UNIXディレクトリを監視する方法とディレクトリ内に新しいファイルがある場合は別のディレクトリにコピーされます

  11. 11

    過去1時間に宛先のファイルが変更されたファイルを無視して、あるディレクトリから別のディレクトリにファイルをコピーしますか?

  12. 12

    サイズ変更された演算子delete []が呼び出されることはありません

  13. 13

    ディレクトリ「パス」は存在しません。ファイル変更の監視を開始できませんでした

  14. 14

    タイムスタンプが変更されたすべてのファイルとサブディレクトリを再帰的に一覧表示します

  15. 15

    監視ディレクトリにSFTP経由でアップロードされたすべてのファイルがJava7経由で使用できることを確認するにはどうすればよいですか?

  16. 16

    外部ファイルから呼び出したときにcropphpを使用して画像のサイズを変更すると、オンラインサーバーに画像が表示されないという問題があります。

  17. 17

    ディレクトリ内のすべてのファイルのアクセス許可を、新しいファイルが追加されたときにデフォルト値に変更するにはどうすればよいですか?

  18. 18

    呼び出された(ネストされた/内側の)バッチファイル用に、呼び出し側(外側)のバッチファイルの作業ディレクトリを保持するにはどうすればよいですか?

  19. 19

    .shから呼び出されたときにcppソースファイルをデバッグするときにブレークポイントを見つけることができません

  20. 20

    debianパッケージがインストールされたときに変更されたファイルまたはディレクトリを特定するにはどうすればよいですか?

  21. 21

    監視対象のファイルが変更されるたびに、chokidarの速度が低下します

  22. 22

    特定の期間に作成されたディレクトリからファイルを削除することはできません

  23. 23

    Javaを呼び出すときに「そのようなファイルまたはディレクトリはありません」

  24. 24

    新しいファイルのパスを出力するディレクトリに作成された新しいフォルダを監視します

  25. 25

    モバイルでフォントのサイズを変更するために@mediaクエリを機能させることができません

  26. 26

    監視可能なコレクション内のアイテムが変更されたときに、現在のクラスプロパティを更新します

  27. 27

    あるディレクトリから別のディレクトリにファイルを再帰的に対処すると、あるディレクトリの変更が別のディレクトリファイルにも反映されますか?

  28. 28

    キーボードを開いたときにフラグメントのあるアクティビティのサイズは変更されません

  29. 29

    ファイルが特定のディレクトリに配置されると、ファイルの名前が自動的に変更されます

ホットタグ

アーカイブ