PathRelativePathToA 函数 (shlwapi.h)

创建从一个文件或文件夹到另一个文件夹的相对路径。

语法

BOOL PathRelativePathToA(
  [out] LPSTR  pszPath,
  [in]  LPCSTR pszFrom,
  [in]  DWORD  dwAttrFrom,
  [in]  LPCSTR pszTo,
  [in]  DWORD  dwAttrTo
);

参数

[out] pszPath

类型:LPTSTR

指向接收相对路径的字符串的指针。 此缓冲区的大小必须至少MAX_PATH个字符。

[in] pszFrom

类型:LPCTSTR

指向最大长度为 null 的字符串的指针 MAX_PATH,该字符串包含定义相对路径开头的路径。

[in] dwAttrFrom

类型:DWORD

pszFrom的文件属性。 如果此值包含FILE_ATTRIBUTE_DIRECTORY,则假定 pszFrom 为目录 ;否则,pszFrom 假定为文件。

[in] pszTo

类型:LPCTSTR

指向最大长度为 null 的字符串的指针 MAX_PATH,该字符串包含定义相对路径终结点的路径。

[in] dwAttrTo

类型:DWORD

pszTo的文件属性。 如果此值包含FILE_ATTRIBUTE_DIRECTORY,则假定 pszTo 为目录 ;否则,pszTo 假定为文件。

返回值

类型:BOOL

如果成功,则返回 TRUE;否则返回 FALSE

言论

此函数采用一对路径,并生成一个相对路径,从一个路径到另一个路径。 路径不必完全限定,但它们必须具有通用前缀,否则函数将失败并返回 FALSE

例如,让起点,pszFrom,为“c:\FolderA\FolderB\FolderC”,终点 pszTo,为“c:\FolderA\FolderD\FolderE”。 PathRelativePathTo 将返回从 pszFrompszTo 的相对路径,如下所示:“....\FolderD\FolderE”。 如果将 pszFrom 设置为“\FolderA\FolderB\FolderC 并将 pszTo 设置为“\FolderA\FolderD\FolderE”,则会收到相同的结果。 另一方面,“c:\FolderA\FolderB”和“a:\FolderA\FolderD 不共享通用前缀,函数将失败。 请注意,“\”不被视为前缀,将被忽略。 如果将 pszFrom 设置为“\FolderA\FolderB”,并将 pszTo 设置为“\FolderC\FolderD”,则函数将失败。

例子

#include <windows.h>
#include <iostream.h>
#include "Shlwapi.h"

void main(void)
{
    char szOut[MAX_PATH] = "";
    char szFrom[ ] = "c:\\a\\b\\path";
    char szTo[ ] = "c:\\a\\x\\y\\file";

    cout  <<  "The relative path is relative from: ";
    cout  <<  szFrom;
    cout  <<  "\n";

    cout  <<  "The relative path is relative to: ";
    cout  <<  szTo;
    cout  <<  "\n";

    PathRelativePathTo(szOut,
                       szFrom,
                       FILE_ATTRIBUTE_DIRECTORY,
                       szTo,
                       FILE_ATTRIBUTE_NORMAL);

    cout  <<  "The relative path is: ";
    cout  <<  szOut;
    cout  <<  "\n";
}

OUTPUT:
==================
The relative path is relative from: c:\a\b\path
The relative path is relative to: c:\a\x\y\file
The relative path is: ..\..\x\y\file

注意

shlwapi.h 标头将 PathRelativePathTo 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional、Windows XP [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 shlwapi.h
Shlwapi.lib
DLL Shlwapi.dll(版本 4.71 或更高版本)