Windows下GetFileAttributesA相对路径查找目录及32/64位架构差异问询
问题结论
- 调用
GetFileAttributesA("someFile.ext")时,会在目录A中查找文件 - 该行为在Visual Studio 32位/64位架构编译下不存在任何差异
详细说明
路径查找规则
Windows平台所有接受相对路径的原生文件API(包括GetFileAttributesA系列函数),相对路径的基准都是进程的当前工作目录(Current Working Directory, CWD)。
进程的当前工作目录默认继承自启动它的父进程:你在处于目录A的终端中启动tmp.exe时,tmp.exe进程的工作目录就被初始化为目录A,因此仅传文件名的相对路径会直接在目录A下检索目标文件,和tmp.exe自身存放的目录B没有关联。
补充常见误区:如果需要基于程序自身所在目录查找文件,需要先通过
GetModuleFileNameA(NULL, ...)获取exe自身的完整路径,剥离执行文件名得到目录B的路径后,再和目标文件名拼接为完整路径传入API,才能实现从目录B查找的效果。
架构差异说明
该路径解析逻辑属于Windows内核层面的通用文件操作规则,和程序编译的目标架构完全无关。只要代码中没有主动调用SetCurrentDirectory修改进程的当前工作目录,无论是32位还是64位编译生成的程序,行为完全一致。
内容的提问来源于stack exchange,提问作者arielBodyLotion
相关产品推荐
相关产品推荐

