小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VC獲取當前路徑及程序名

 oskycar 2012-09-29

VC上或取當前路徑有多種方法,最常用的是使用 GetCurrentDirectory和GetModuleFileName函數(shù),個中都有諸多注意事項,特別總結(jié)一下。

一、獲取當前運行目錄的絕對路徑
1、使用GetCurrentDirectory函數(shù)

假設(shè)程序路徑為D:\Test\tst.exe,執(zhí)行GetCurrentDirectory函數(shù)

 
char pBuf[MAX_PATH]; 

GetCurrentDirectory(MAX_PATH,pBuf);
pBuf="D:\Test"

但是如果使用CFileDialog、CFile::Open等函數(shù)后,設(shè)置不當則會導(dǎo)致再次獲取當前路徑值改變。所以,如要避免當前路徑改變,如果使用CFileDialog,則要把在CFileDialog的dwFlags標志設(shè)置為OFN_NOCHANGEDIR。如下:

 
CFileDialog hFileDlg(false,NULL , 

         NULL, 

         OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR, 

         TEXT("Text Files (*.txt)|*.txt|All Files(*.*)|*.*|"), 

         NULL);
也可以,先執(zhí)行GetCurrentDirectory把獲取到目錄路徑保存下來,處理完成后,再次SetCurrentDirectory設(shè)置一下。

2、使用GetModuleFileName

 
 CString strCurPath; 

 GetModuleFileName(NULL,strCurPath.GetBuffer(MAX_PATH),MAX_PATH); 

 int pos= strCurPath.ReverseFind(_T('\\')); 

     strCurPath = strCurPath.Left(pos);
輸出(路徑包括運行文件名):

strCurPath="D:\Test\tst.exe"

二、獲取打開文件的完整路徑
通過對話框打開文件時,一般均需獲取打開文件的完整路徑,可使用CFileDialog的GetPathName函數(shù),代碼如下:

 
 CFileDialog hFileDlg(false,NULL , 

     NULL, 

     OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR, 

     TEXT("Text Files (*.txt)|*.txt|All Files(*.*)|*.*|"), 

     NULL); 

 if(hFileDlg.DoModal() == IDOK) { 

     m_strEdtSrcFile = hFileDlg.GetPathName(); 

     UpdateData(FALSE); 

 }
三、獲取當前運行程序名
通過GetModuleFileName獲取完整路徑后,可以使用PathStripPath API函數(shù)解析路徑,代碼示例如下:


 
/* 

 #include "shlwapi.h" 

 #pragma comment(lib, "shlwapi.lib ") 

 */

   

 TCHAR szPath2[] = TEXT("D:\\Test\\tst.exe"); 

 PathStripPath(szPath2); 

 // Result: szPath2 ==tst.exe 

       

 TCHAR szPath3[] = TEXT("D:\\Test\\Debug"); 

 PathStripPath(szPath3); 

 // Result: szPath3 == Debug 

   

 TCHAR szPath4[] = TEXT("D:\\Test\\Debug\\"); 

 PathStripPath(szPath4); 

 // Result: szPath4 == Debug\ 

   

 TCHAR szPath5[] = TEXT("D:\\"); 

 PathStripPath(szPath5); 

 // Result: szPath5 == D:\
使用此函數(shù)要注意,并非只是提取文件名,如果它不能識別時,則會返回原始字符串(不做處理)。所以,不放心的話,自己手動提取文件名更為保險。

 
 CString strCurPath; 

 GetModuleFileName(NULL,strCurPath.GetBuffer(MAX_PATH),MAX_PATH) 

 strCurPath.ReleaseBuffer();//Must ReleaseBuffer, or GetLength=0 

 int pos= strCurPath.ReverseFind(_T('\\')); 

 int len = strCurPath.GetLength(); 

 strCurPath =  strCurPath.Right(len-pos-1);

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多