Функция 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 вернет относительный путь от 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 или более поздняя) |