• システム開発に関わる内容をざっくりと書いていく

C# FileNotFoundException / DirectoryNotFoundException の切り分け

ファイル・ディレクトリが見つからない例外。パス文字列のミス、作業ディレクトリ、配布物の欠けがほとんど。

先に結論

  • FileNotFoundException … ファイル、DirectoryNotFoundException … 親フォルダ側
  • 例外の FileName / メッセージのパスをそのまま確認
  • 相対パスは カレントディレクトリ依存(Visual Studio / IIS / サービスで違う)
  • アセンブリ読み込み失敗も FileNotFound で出ることがある(DLL 名に注意)

切り分け

  1. 例外に出ているフルパスを控える
  2. そのパスが実在するか OS 上で確認
  3. 相対なら Environment.CurrentDirectory / AppContext.BaseDirectory をログ
  4. Docker / Linux なら大文字小文字・スラッシュも確認
  5. DLL 名なら依存アセンブリのコピー・発行設定を疑う

対策の型

  • コンテンツは BaseDirectory 基準でパス結合
  • 設定で絶対パスまたはコンテンツルートを明示
  • 発行にファイルを含める(csproj の CopyToOutputDirectory)
  • 存在確認してから開く+分かりやすいエラーメッセージ

ざっくりまとめ

  • パスを信じず、例外のパスとカレントをログする
  • 相対パスは環境で壊れる
  • DLL の FileNotFound は別問題として扱う

関連記事