win32相對路徑到絕對路徑的轉換

         最近項目中有部分模塊相對路徑不能滿足需要,但是隻能獲得程序安裝之後的相對路徑。因此需要將相對路徑轉換爲絕對路徑,查了很多博文,都沒有給出說明。並且有的博主還有自己寫的轉換函數。後來自己在偶然的嘗試中發下


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]

可見此函數可以實現從相對路徑到絕對路徑的轉換。異常情況,未發現。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章