GetFullPathName這個函數可以滿足需要。MSDN中也要對此的說明,MSDN中說明如下:Multithreaded applications and shared library code should not use theGetFullPathName function and should avoid using relative path names.(多線程應用和共享庫不能夠使用GetFullPathName函數,GetFullPathName函數可以使用一個相對路徑名稱。)。 GetFullPathName 函數聲明如下:
GetFullPathName(
__in LPCSTR lpFileName,
__in DWORD nBufferLength,
__out_ecount_part_opt(nBufferLength, return + 1) LPSTR lpBuffer,
__deref_opt_out LPSTR *lpFilePart
);
lpFileName爲文件名稱,可以是一個相對路徑 + 文件名稱;nBufferLength,是用來存儲獲得的全路徑的緩衝區大小;lpBuffer是緩衝區保存全路徑,lpFilePart如果提供的是目錄,則此參數輸出爲空。
使用如下:
#define SYXK_PATH_LOCAL_PRINTS "..\\LocalFiles\\printments\\"
TCHAR buff[MAX_PATH];
TCHAR** lppPart={NULL};
sContractFile.Format(TEXT("%s%s"), TEXT(SYXK_PATH_LOCAL_PRINTS), TEXT("matecontract.doc"));
GetFullPathName(sContractFile,MAX_PATH, buff, lppPart);
斷點獲取buff的值如下:
buff ----- "E:\物料\物料\ZTSystem_MMS\MmsClient\LocalFiles\printments\matecontract.doc" wchar_t [260]
可見此函數可以實現從相對路徑到絕對路徑的轉換。異常情況,未發現。