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 为 directory;否则, 假定 pszTo 为文件。

返回值

类型: BOOL

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

注解

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

例如,让 pszFrom 的起点为“c:\FolderA\FolderB\FolderC”,而结束点 pszTo 为“c:\FolderA\FolderD\FolderE”。 PathRelativePathTopszFrompszTo 的相对路径返回为:“.....\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 专业版、Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 shlwapi.h
Library Shlwapi.lib
DLL Shlwapi.dll (版本 4.71 或更高版本)