ネット検索で同様の問題について、記述が見つけられなかったので質問を作成しました。
ご教示いただけますと幸いです。
環境
- Windows 10: 20H1 (19043.985)
- .NET SDK (5.0.300)
前提・実現したいこと
- 名前が1文字のファイル・フォルダを含む、ファイルシステムの変更検知。
発生している問題・エラーメッセージ
System.IO.FileSystemWatcher
で指定したディレクトリ直下において、
- 名前が1文字のファイル・フォルダの作成が検知されない。
- 名前が1文字のファイル・フォルダの削除が検知されない。
- 名前が1文字のファイル・フォルダの内容の変更が検知されない。
- 名前を1文字に変更時に
FullPath
とName
が取得できない。
該当のソースコード
fsharp
1let fileSystemWatcher = new System.IO.FileSystemWatcher @"ディレクトリへのパス" 2fileSystemWatcher.IncludeSubdirectories <- true 3 4let OnChanged (e: System.IO.FileSystemEventArgs) = 5 printfn "変更: %s" e.FullPath 6 printfn "----" 7 8let OnCreated (e: System.IO.FileSystemEventArgs) = 9 printfn "作成: %s" e.FullPath 10 printfn "----" 11 12let OnDeleted (e: System.IO.FileSystemEventArgs) = 13 printfn "削除: %s" e.FullPath 14 printfn "----" 15 16let OnRenamed (e: System.IO.RenamedEventArgs) = 17 printfn "名前変更:" 18 printfn "旧: %s" e.OldFullPath 19 printfn "新: %s" e.FullPath 20 printfn "----" 21 22fileSystemWatcher.Changed.Add OnChanged 23fileSystemWatcher.Created.Add OnCreated 24fileSystemWatcher.Deleted.Add OnDeleted 25fileSystemWatcher.Renamed.Add OnRenamed 26 27fileSystemWatcher.EnableRaisingEvents <- true 28 29printfn "----" 30stdin.ReadLine() |> ignore 31 32fileSystemWatcher.EnableRaisingEvents <- false 33fileSystemWatcher.Dispose()
試したこと
Filter
を規定値から変更する。
fsharp
1fileSystemWatcher.Filter <- ""
NotifyFilter
に指定可能な値を全て設定する。
fsharp
1fileSystemWatcher.NotifyFilter <- System.IO.NotifyFilters.Attributes ||| System.IO.NotifyFilters.CreationTime ||| System.IO.NotifyFilters.DirectoryName ||| System.IO.NotifyFilters.FileName ||| System.IO.NotifyFilters.LastAccess ||| System.IO.NotifyFilters.LastWrite ||| System.IO.NotifyFilters.Security ||| System.IO.NotifyFilters.Size
C#にて確認してみました。
.Net Core 3.0, .Net Core 3.1, .Net 5.0 にて再現しました。
.Net Core 2.x, .Net Core 1.x だと正常のようです。
FileSystemWatcher のバグでしょうね。
hihijijiさん
.NETのバージョン変更を考える際の参考になりました。
ご丁寧な回答、ありがとうございます。
userisgodさん
すみません、.NETのIssueに載っている問題なのですね。
教えて頂きありがとうございます。
回答1件
あなたの回答
tips
プレビュー