Función PathRelativePathToA (shlwapi.h)

Crea una ruta de acceso relativa de un archivo o carpeta a otra.

Sintaxis

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

Parámetros

[out] pszPath

Tipo: LPTSTR

Puntero a una cadena que recibe la ruta de acceso relativa. Este búfer debe tener al menos MAX_PATH caracteres de tamaño.

[in] pszFrom

Tipo: LPCTSTR

Puntero a una cadena terminada en null de longitud máxima MAX_PATH que contiene la ruta de acceso que define el inicio de la ruta de acceso relativa.

[in] dwAttrFrom

Tipo: DWORD

Atributos de archivo de pszFrom. Si este valor contiene FILE_ATTRIBUTE_DIRECTORY, se supone que pszFrom es un directorio; de lo contrario, se supone que pszFrom es un archivo.

[in] pszTo

Tipo: LPCTSTR

Puntero a una cadena terminada en null de longitud máxima MAX_PATH que contiene la ruta de acceso que define el punto de conexión de la ruta de acceso relativa.

[in] dwAttrTo

Tipo: DWORD

Atributos de archivo de pszTo. Si este valor contiene FILE_ATTRIBUTE_DIRECTORY, se supone que pszTo es directory; de lo contrario, se supone que pszTo es un archivo.

Valor devuelto

Tipo: BOOL

Devuelve TRUE si se ejecuta correctamente o FALSE de lo contrario.

Comentarios

Esta función toma un par de rutas de acceso y genera una ruta de acceso relativa de una a la otra. Las rutas de acceso no tienen que ser completas, pero deben tener un prefijo común, o la función producirá un error y devolverá FALSE.

Por ejemplo, deje que el punto inicial, pszFrom, sea "c:\FolderA\FolderB\FolderC" y el punto final, pszTo, sea "c:\FolderA\FolderD\FolderE". PathRelativePathTo devolverá la ruta de acceso relativa de pszFrom a pszTo como: "....\FolderD\FolderE". Obtendrá el mismo resultado si establece pszFrom en "\FolderA\FolderB\FolderC" y pszTo en "\FolderA\FolderD\FolderE". Por otro lado, "c:\FolderA\FolderB" y "a:\FolderA\FolderD no comparten un prefijo común y se producirá un error en la función. Tenga en cuenta que "\" no se considera un prefijo y se omite. Si establece pszFrom en "\FolderA\FolderB" y pszTo en "\FolderC\FolderD", se producirá un error en la función.

Ejemplos

#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

Nota:

El encabezado shlwapi.h define PathRelativePathTo como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutro de codificación con código que no es neutral de codificación puede provocar discrepancias que dan lugar a errores de compilación o en tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional, Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado shlwapi.h
Library Shlwapi.lib
Archivo DLL Shlwapi.dll (versión 4.71 o posterior)