私は通常、ERROR_FILE_NOT_FOUND
そこにないファイルを開こうとすると取得しますが、fopen()
失敗してGetLastError()
戻ってきますERROR_PATH_NOT_FOUND
。
ERROR_FILE_NOT_FOUND
では、との違いは何ERROR_PATH_NOT_FOUND
ですか?
私は通常、ERROR_FILE_NOT_FOUND
そこにないファイルを開こうとすると取得しますが、fopen()
失敗してGetLastError()
戻ってきますERROR_PATH_NOT_FOUND
。
ERROR_FILE_NOT_FOUND
では、との違いは何ERROR_PATH_NOT_FOUND
ですか?
にWinError.h
、ERROR_FILE_NOT_FOUND
「指定されたファイルが見つかりません」という説明文があります。ERROR_PATH_NOT_FOUND
「システムは指定されたパスを見つけることができません」という説明テキストがあります。
これは特に問題を明確にしません。
ただし、通常、「ファイルが見つかりません」とはファイル自体が見つからない場合を指し、「パスが見つかりません」とはパスのコンポーネント(指定されたディレクトリ名の1つ)が見つからない場合を指します。
実際には、正規の意味はエラーコードの名前から推測できます。
すべての「一般的な」エラーコードと同様に、特定の意味は、このエラーを「生成する」と言われる関数の実装に大きく依存します。この点でさらに悪い例として、エラーを考えてみてくださいERROR_INVALID_DATA
。関数のドキュメントだけが、それによって何をすべきかを教えてくれます。
これにより、これらのエラーコードをfopen
(公式に)返さない、または設定することさえできなくなります。fopen
はCRTライブラリの一部であるため、そのエラー報告メカニズムを使用するように文書化されていますerrno
。
CRTソースコードでのの実装を見ると、fopen
(最終的には、内部ヘルパー関数のかなりのコールスタックです)、最終的にWin32 APIfopen
を呼び出すことがわかります(当然のことながら) 。次に、によって返される可能性のあるエラーをerrnoのようなエラーCreateFile
に注意深くマッピングします( CRTソースを引き続き追跡する場合は、内部関数を使用します)。これはとの両方をerrnoにマップします。CreateFile
_dosmaperr()
ERROR_FILE_NOT_FOUND
ERROR_PATH_NOT_FOUND
ENOENT
したがって、fopen
この区別のコンテキストでは、の実装の詳細であるため、意味がないと見なすのが最適ですfopen
。
ERROR_PATH_NOT_FOUND
つまり、コンテナディレクトリが存在しません。
ERROR_FILE_NOT_FOUND
つまり、コンテナディレクトリが存在し、指定されたファイルが含まれていません。