none
FileSystemWatcherとフォルダ削除 RRS feed

  • 質問

  • お世話になります。

    フォルダの削除に失敗することがある件で質問させていただきます。

    Folder1

       └ File1.txt

    と、フォルダ内にファイルがあり、FileSystemWatcherでFile1.txtを監視しています。(カレントディレクトリは別のフォルダにあります)

    外部アプリでFolder1を削除しようとすると まれに失敗することがあります。

    Windowsのパフォーマンスモニタで 見てみたところ、監視しているexeが Folder1を開いているハンドルが表示されました。

    (フォルダをオープンしているからと言って、排他モードで開いてなければ他のアプリに影響はないはずですが)

    フォルダの削除に失敗することがあるのは、FileSystemWatcherがフォルダを開いているからでしょうか

    (もしそれが原因なら、FileSystemWatcherでファイルの削除を検出したとき、監視を停止し、FileSystemWatcherをdispose

    すれば解決するのではないかと考えました

    現象がまれにしか起こらないため「試しにやってみる」方法がとれません)


    2019年3月14日 2:43

回答

  • oops aaa111さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    FileSystemWatcherがfolder1を排他モードで開くと、外部アプリケーションはそのハンドルを開くことすらできません。
    最も可能性のあることはフォルダハンドルにいくつかのファイルか他のものを書いているということです、
    あるいは、以下のスレッドのように、外部アプリケーションに十分な権限がないことです。

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/7b8e8e40-0cb5-4b1b-ac3d-2ed44a9e1d5d/cannot-move-or-delete-a-file-found-by-filesystemwatcher-in-my-windows-service?forum=vbgeneral

    上記の情報は役に立てば幸いです。

    どうぞよろしくお願いします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~
    • 回答としてマーク oops aaa111 2019年3月25日 4:45
    2019年3月19日 6:12
    モデレータ

すべての返信

  • oops aaa111さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    FileSystemWatcherがfolder1を排他モードで開くと、外部アプリケーションはそのハンドルを開くことすらできません。
    最も可能性のあることはフォルダハンドルにいくつかのファイルか他のものを書いているということです、
    あるいは、以下のスレッドのように、外部アプリケーションに十分な権限がないことです。

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/7b8e8e40-0cb5-4b1b-ac3d-2ed44a9e1d5d/cannot-move-or-delete-a-file-found-by-filesystemwatcher-in-my-windows-service?forum=vbgeneral

    上記の情報は役に立てば幸いです。

    どうぞよろしくお願いします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~
    • 回答としてマーク oops aaa111 2019年3月25日 4:45
    2019年3月19日 6:12
    モデレータ
  • Harukaさん、情報有難うございます

    > あるいは、以下のスレッドのように、外部アプリケーションに十分な権限がないことです。

    PCのローカルファイルシステム(NTFS)上で行っているので、権限はあるはずです

    ネットで色々調べた結果(*1)、どうもファイルを監視中は親ディレクトリを削除できないようだとわかりました。
    ディレクトリを削除する前に、アプリケーション側でFileSystemWatcherによる監視を解除する方法を、試してみます。

    *1 同じ問題に遭遇した人用にキーワードを書いておきます

    ReadDirectoryChangesW,  FILE_SHARE_DELETE


    2019年3月25日 4:45