VC通過相對路徑獲取絕對路徑


編程中,有時候會遇到這樣的問題,

當運行某個程序:

D:\abc\efg\123.exe時

如果想得到efg目錄下的xxx.txt文件的路徑,那么可以用".\xxx.txt"或者"xxx.txt"相對於123.exe,  調用:G2XGetFullpath(".\xxx.txt", NULL); 或則G2XGetFullpath("..\efg\xxx.txt", NULL);

如果想得到abc目錄下的yyy.txt文件的路徑,那么可以用"..\yyy.txt"相對於123.exe, 調用:G2XGetFullpath("..\yyy.txt", NULL);

如果想得到D:目錄下的zzz.txt文件的路徑,那么可以用"..\..\zzz.txt"相對於123.exe,調用:G2XGetFullpath("..\..\zzz.txt", NULL);

/*
  通過相對路徑相對於某個絕對路徑,獲取全路徑
  
lpszRelativePath: 相對路徑
  lpszAbsolutePath: 相對的絕對路徑,如果為NULL,表明相對於當前模塊所在的目錄
*/
CString G2XGetFullpath( LPCTSTR lpszRelativePath, LPCTSTR lpszAbsolutePath) { CString strAbsPath;
if (lpszAbsolutePath) { strAbsPath = lpszAbsolutePath; strAbsPath.TrimRight(_T('\\')); strAbsPath.AppendChar(_T('\\')); } else { strAbsPath = G2XGetCurrentDirectory(); // 獲取當前模塊所在的目錄, 該函數很簡單,沒有寫,可自行編寫 } strAbsPath.Trim(); if (lpszRelativePath == NULL || *lpszRelativePath == 0) return _T(""); if (*lpszRelativePath == _T('.')) { if (*(lpszRelativePath+1) == _T('\\') ) { //當前目錄 strAbsPath += (lpszRelativePath+2); return strAbsPath; } else { G2XUtility::CGxxString<TCHAR> strTmp(lpszRelativePath); int nAt = strTmp.FindString(_T("..\\"), 0); if (nAt != 0) { CString strError; strError.Format(_T("無效的路徑 %s"), lpszRelativePath); ERROR_TRACINGT(strError); return _T(""); } else { while(nAt == 0) { strAbsPath.TrimRight(_T('\\')); int nR = strAbsPath.ReverseFind(_T('\\')); if (nR == -1) { CString strError; strError.Format(_T("無效的路徑 %s"), lpszRelativePath); ERROR_TRACINGT(strError); return _T(""); } CString tmp = strAbsPath.Left(nR + 1); strAbsPath = tmp; strTmp = strTmp.Mid(nAt + 3); nAt = strTmp.FindString(_T("..\\"), 0); } strAbsPath += strTmp.GetData(); return strAbsPath; } } } else if(*lpszRelativePath == _T('\\')) { strAbsPath.TrimRight(_T('\\')); strAbsPath += lpszRelativePath; return strAbsPath; } else { CString strRe = lpszRelativePath; if (strRe.GetLength() > 2) { if (strRe.GetAt(1) == _T(':')) { return strRe; } } strAbsPath += lpszRelativePath; return strAbsPath; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM