私は通常、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_FOUNDERROR_PATH_NOT_FOUNDENOENT
したがって、fopenこの区別のコンテキストでは、の実装の詳細であるため、意味がないと見なすのが最適ですfopen。
ERROR_PATH_NOT_FOUNDつまり、コンテナディレクトリが存在しません。
ERROR_FILE_NOT_FOUNDつまり、コンテナディレクトリが存在し、指定されたファイルが含まれていません。