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 為目錄
[in] pszTo
類型:LPCTSTR
長度上限之 null 終止字串的指標MAX_PATH,其中包含定義相對路徑端點的路徑。
[in] dwAttrTo
類型:DWORD
pszTo的檔案屬性。 如果此值包含 FILE_ATTRIBUTE_DIRECTORY,假設 pszTo 為目錄
傳回值
類型:BOOL
如果成功,則傳回 true true,否則會 傳回 false。
言論
此函式會採用一組路徑,併產生從一個路徑到另一個路徑的相對路徑。 路徑不一定要完整,但必須有通用前置詞,否則函式將會失敗並傳回 FALSE。
例如,讓起點 pszFrom為 “c:\FolderA\FolderB\FolderC”,而結束點 pszTo為 “c:\FolderA\FolderD\FolderE”。
PathRelativePathTo 會將 pszFrom 的相對路徑傳回為 “....\FolderD\FolderE” pszTo。 如果您將 pszFrom 設為 “\FolderA\FolderB\FolderC”,並將 pszTo 為 “\FolderA\FolderD\FolderE” ,您就會得到相同的結果。 另一方面,“c:\FolderA\FolderB” 和 “a:\FolderA\FolderD 不會共用一般前置詞,而且函式將會失敗。 請注意,“\” 不會被視為前置詞,而且會被忽略。 如果您將 pszFrom
例子
#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 標頭會根據 UNICODE 預處理器常數的定義,將 PathRelativePathTo 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional、Windows XP [僅限傳統型應用程式] |
支援的最低伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平臺 | 窗戶 |
標頭 | shlwapi.h |
連結庫 | Shlwapi.lib |
DLL | Shlwapi.dll (4.71 版或更新版本) |