1. ホーム
  2. c

WindowsでC言語のディレクトリが存在するかどうかを確認する方法は?

2023-10-04 21:02:49

質問

質問

Windows C アプリケーションで、関数に渡されたパラメータを検証して、指定されたパスが存在することを確認したいのです。

C言語でWindowsにディレクトリが存在するかどうかを確認するにはどうすればよいですか。

*存在を確認してからパスを使用するまでの間に存在しなくなるというレースコンディションに陥る可能性があることは理解していますが、私はそれに対処することができます。

追加の背景

ディレクトリが存在するかしないかを明示的に知るには、パーミッションが絡むと厄介なことがあります。ディレクトリが存在するかどうかを判断しようとする際に、プロセスがそのディレクトリまたは親ディレクトリにアクセスする権限を持っていない可能性があります。 これは私のニーズにはOKです。 . ディレクトリが存在しないかアクセスできない場合、私のアプリケーションでは両方とも無効なパスの失敗として扱われるため、区別する必要はありません。(仮想) あなたのソリューションがこの区別を提供する場合、ボーナス ポイントがあります。

C 言語、C ランタイム ライブラリ、または Win32 API における任意のソリューションは問題ありませんが、理想的には、一般的にロードされるライブラリ (たとえば kernel32、user32 など) にこだわり、非標準のライブラリをロードするようなソリューションは避けたいと考えています (たとえば PathFileExists のように)。繰り返しになりますが、ソリューションがクロスプラットフォームである場合は (仮想) ボーナス ポイントがあります。

関連

Win32 プログラムを使用して、ファイルが存在するかどうかを確認するにはどうすればよいですか。

どのように解決するのですか?

このようにします。

BOOL DirectoryExists(LPCTSTR szPath)
{
  DWORD dwAttrib = GetFileAttributes(szPath);

  return (dwAttrib != INVALID_FILE_ATTRIBUTES && 
         (dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}

この GetFileAttributes () メソッドは、Kernel32.dll に含まれています。