Поделиться через


Функция 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\FolderD\FolderE". PathRelativePathTo возвращает относительный путь из pszFrom в pszTo как :...\FolderD\FolderE. Вы получите тот же результат, если pszFrom значение "\FolderA\FolderB\FolderC" и pszTo значение "\FolderA\FolderD\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 как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный, Windows XP [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка shlwapi.h
библиотеки Shlwapi.lib
DLL Shlwapi.dll (версия 4.71 или более поздняя)