5

私は通常、ERROR_FILE_NOT_FOUNDそこにないファイルを開こうとすると取得しますが、fopen()失敗してGetLastError()戻ってきますERROR_PATH_NOT_FOUND

ERROR_FILE_NOT_FOUNDでは、との違いは何ERROR_PATH_NOT_FOUNDですか?

4

3 に答える 3

11

WinError.hERROR_FILE_NOT_FOUND「指定されたファイルが見つかりません」という説明文があります。ERROR_PATH_NOT_FOUND「システムは指定されたパスを見つけることができません」という説明テキストがあります。

これは特に問題を明確にしません。

ただし、通常、「ファイルが見つかりません」とはファイル自体が見つからない場合を指し、「パスが見つかりません」とはパスのコンポーネント(指定されたディレクトリ名の1つ)が見つからない場合を指します。

于 2012-03-07T10:05:35.880 に答える
6

実際には、正規の意味はエラーコードの名前から推測できます。

すべての「一般的な」エラーコードと同様に、特定の意味は、このエラーを「生成する」と言われる関数の実装に大きく依存します。この点でさらに悪い例として、エラーを考えてみてください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

于 2012-03-07T10:26:27.060 に答える
3

ERROR_PATH_NOT_FOUNDつまり、コンテナディレクトリが存在しません。 ERROR_FILE_NOT_FOUNDつまり、コンテナディレクトリが存在し、指定されたファイルが含まれていません。

于 2012-03-07T10:12:13.777 に答える