为何PathRelativePathTo()需区分目标路径是文件还是目录?
PathRelativePathToW 中 dwAttrTo 参数的作用与差异场景
函数签名如下:
BOOL PathRelativePathToW( [out] LPWSTR pszPath, [in] LPCWSTR pszFrom, [in] DWORD dwAttrFrom, [in] LPCWSTR pszTo, [in] DWORD dwAttrTo );
dwAttrTo参数用于明确目标路径pszTo的类型:设为FILE_ATTRIBUTE_DIRECTORY表示目标是目录,设为0表示目标是文件。之所以必须做此区分,核心是Windows文件系统允许同一目录下存在同名的文件和目录,函数需要通过该参数消除路径指向的歧义,确保生成的相对路径准确对应预期对象。
确实存在仅修改dwAttrTo参数就会返回不同结果的场景,最典型的是源路径为文件,目标路径为源的父目录的情况:
场景示例:
情况1:正确标识目标为目录
pszFrom: C:\foo\bar\test.txt(dwAttrFrom=0,标识为文件) pszTo: C:\foo\bar(dwAttrTo=FILE_ATTRIBUTE_DIRECTORY,标识为目录) result: ..
此时函数识别到目标是源文件所在的父目录,直接返回表示上级目录的..。
情况2:错误标识目标为文件
pszFrom: C:\foo\bar\test.txt(dwAttrFrom=0,标识为文件) pszTo: C:\foo\bar(dwAttrTo=0,标识为文件) result: ../bar
函数会误认为pszTo是位于C:\foo目录下的一个名为bar的文件,因此生成的相对路径需要先回到C:\foo目录,再指向该文件,最终返回../bar。
内容的提问来源于stack exchange,提问作者j6t
相关产品推荐
相关产品推荐

