可能重复:
What's the difference between PATH_NOT_FOUND and NAME_NOT_FOUND
当我尝试打开不存在的文件时,我通常会ERROR_FILE_NOT_FOUND
,但现在fopen会因ERROR_PATH_NOT_FOUND
而失败。
那么ERROR_FILE_NOT_FOUND
和ERROR_PATH_NOT_FOUND
之间有什么区别?
答案 0 :(得分:6)
在WinError.h
中,ERROR_FILE_NOT_FOUND
包含描述性文字“系统无法找到指定的文件”。并且ERROR_PATH_NOT_FOUND
具有描述性文本“系统无法找到指定的路径。”
这并没有特别澄清问题。
然而,通常,“找不到文件”是指无法找到文件本身并且“找不到路径”的情况是指无法找到路径的组件(指定的目录名之一)的情况
答案 1 :(得分:5)
实际上,规范含义可以从错误代码的名称中推断出来。
特定的含义,与所有“通用”错误代码一样,在很大程度上取决于被称为“产生”此错误的函数的实现。对于这方面更糟糕的例子,考虑错误ERROR_INVALID_DATA
- 只有函数的文档可以告诉它应该是什么。
这使我们指出fopen
甚至没有(officially)返回或设置这些错误代码。 fopen
是CRT库的一部分,因此记录使用其错误报告机制:errno
。
在CRT源代码中查看fopen
的实现,你可以看到(最终,这是一个内部帮助函数的调用堆栈),最终调用fopen
(不出意料) CreateFile
Win32 API。然后,它会仔细地将CreateFile
可能返回的错误映射到类似errno的错误(如果您仍想跟随CRT源,则使用内部_dosmaperr()
函数)。这会将ERROR_FILE_NOT_FOUND
和ERROR_PATH_NOT_FOUND
映射到errno ENOENT
。
因此,在fopen
的上下文中,区别最好被认为是无意义的,因为它是fopen
的实现细节。
答案 2 :(得分:2)
ERROR_PATH_NOT_FOUND
表示容器目录不存在。
ERROR_FILE_NOT_FOUND
表示容器目录存在,并且不包含指定文件。