ERROR_PATH_NOT_FOUND vs ERROR_FILE_NOT_FOUND,有什么区别?

sas*_*alm 1 c++ winapi windowserror

可能重复:
PATH_NOT_FOUND和NAME_NOT_FOUND之间有什么区别

ERROR_FILE_NOT_FOUND当我尝试打开一个不存在的文件时,我通常会得到,但现在fopen失败了ERROR_PATH_NOT_FOUND.

那么ERROR_FILE_NOT_FOUND和之间的区别是什么ERROR_PATH_NOT_FOUND

Rog*_*mbe 6

WinError.h,ERROR_FILE_NOT_FOUND有描述性文本"系统找不到指定的文件".并ERROR_PATH_NOT_FOUND具有描述性文本"系统无法找到指定的路径".

这并没有特别澄清问题.

然而,通常,"未找到文件"是指无法找到文件本身并且"未找到路径"指的是无法找到路径的组件(指定的目录名称之一)的情况.

  • 谢谢.事实证明这是因为我在路径中的%appdata%.似乎fopen不接受envvars. (2认同)

Chr*_*n.K 5

实际上,规范含义可以从错误代码的名称中推断出来.

特定的意义,因为它是所有的"通用"的错误代码,在很大程度上取决于所表示功能的实现"生产"这个错误.对于这方面更糟糕的例子,考虑错误ERROR_INVALID_DATA- 只有函数的文档可以告诉它应该是什么.

这使我们达到fopen甚至(正式)返回或设置这些错误代码的程度.fopen是CRT库的一部分,因此记录使用其错误报告机制:errno.

看一下fopenCRT源代码的实现,你可以看到(最终它是一个内部帮助函数的调用堆栈),fopen最终调用(不出意料地)CreateFileWin32 API.然后仔细地将可能返回的错误映射CreateFile到类似errno的错误(使用内部_dosmaperr()函数,如果您仍想跟随CRT源).这既映射ERROR_FILE_NOT_FOUND,并ERROR_PATH_NOT_FOUND在错误号ENOENT.

因此,fopen在区分的背景下最好被认为是无意义的,因为它是一个实现细节fopen.