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


Функция PathRelativePathToW (shlwapi.h)

Создает относительный путь из одного файла или папки в другой.

Синтаксис

BOOL PathRelativePathToW(
  [out] LPWSTR  pszPath,
  [in]  LPCWSTR pszFrom,
  [in]  DWORD   dwAttrFrom,
  [in]  LPCWSTR 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 вернет относительный путь от pszFrom к pszTo в виде :...\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 в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional, Windows XP [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header shlwapi.h
Библиотека Shlwapi.lib
DLL Shlwapi.dll (версия 4.71 или более поздняя)