VC新建目錄CreateDirectory、得到exe存放路徑GetModuleFileName、獲取當前目錄GetCurrentDirectory、CFileDialog設置打開默認路徑

創建多級目錄

  1. void CreateFolder(char *FilePath)  
  2. {  
  3.     char FilePath2[MAX_PATH]="";   
  4.     for (int i =0; i< MAX_PATH; i++)  
  5.     {  
  6.         if (FilePath[i] =='\\'||FilePath[i] =='/')  
  7.         {  
  8.           
  9.              DWORD dwAttr=GetFileAttributes(FilePath2);    
  10.              if(dwAttr==0xFFFFFFFF)  //目錄不存在則創建     
  11.                  CreateDirectory(FilePath2,NULL);  
  12.         }  
  13.         FilePath2[i] = FilePath[i];  
  14.           
  15.     }  
  16.   
  17. }  


 

新建目錄CreateDirectory

第一個參數值爲文件夾名稱,第二個參數值爲安全屬性,一般設置爲NULL即可。如果正確創建,返回值爲1,如果沒有正常創建文件夾,則返回0。

  特別的:該函數每次調用時都只能創建一級文件夾,即文件夾中不能再包含子文件夾。
  當希望創建含有子文件夾的文件夾時,可以先使用該函數創建一級文件夾,然後再使用該函數在一級文件夾下創建子文件夾。如:
  希望創建:d:\\TEST\\temp,
  則:CString str = “d:\\TEST”;
  CreateDirectory(str, NULL);
  str = str + \\temp;
  CreateDirectory(str, NULL);

  1. CString szDir;  
  2. szDir="C:\\temp";//臨時文件夾  
  3. DWORD dwAttr=GetFileAttributes(szDir);  
  4. if(dwAttr==0xFFFFFFFF)  //臨時文件夾不存在則創建  
  5. {  
  6.     CreateDirectory(szDir,NULL);  
  7. )  
  8. //.........chuli  
  9. RemoveDirectory(szDir);//刪除文件夾  

得到運行程序所在路徑全路徑(exe或其他模塊文件名稱,程序目錄):GetModuleFileName。

函數原型:

  DWORD GetModuleFileName(
  HMODULE hModule,
  LPTSTR lpFilename,
  DWORD nSize
  );
  函數參數說明:
  hModule HMODULE 裝載一個程序實例的句柄。如果該參數爲NULL,該函數返回該當前應用程序全路徑。
  lpFileName LPTSTR 是你存放返回的名字的內存塊的指針,是一個輸出參數
  nSize DWORD ,裝載到緩衝區lpFileName的最大值
  函數返回值:
  如果返回爲成功,將在lpFileName的緩衝區當中返回相應模塊的路徑,如果所設的nSize過小,那麼返回僅按所設置緩衝區大小返回相應字符串內容。
  如果函數失敗,返回值將爲0,利用GetLastError可獲得異常代碼。
  需要的頭文件爲:

  windows.h


  
  1. #include <windows.h>  
  2.   #include <stdio.h>  
  3.   BOOL CreateSampleService()  
  4.   {  
  5.   TCHAR szPath[MAX_PATH];  
  6.   if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )  
  7.   {  
  8.   printf("GetModuleFileName failed (%d)\n", GetLastError());  
  9.   return FALSE;  
  10.   }  
  11.   return TRUE;  
  12.   }  
  1. <h1><a name="t3"></a>獲取程序當前路徑GetCurrentDirectory(當前進程的當前路徑,即程序實例目錄,會隨着操作的改變而改變)</h1>DWORD GetCurrentDirectory(  
  2.   DWORD nBufferLength, // size of directory buffer  
  3.   LPTSTR lpBuffer // directory buffer  
  4.   );  

  函數功能
  獲取當前進程的當前目錄
  參數說明
  參數 類型及說明
  nBufferLength 緩衝區的長度
  lpBuffer 指定一個預定義字串,用於裝載當前目錄
  返回值
  調用成功 返回裝載到lpBuffer的字節數。
  如nBufferLength的長度不夠,不足以容納目錄,則返回值是必要的緩衝區長度(要求至少這個長度),其中包括空中止字符。零表示失敗。使用GetLastError函數可獲得錯誤信息

CFileDialog設置打開默認路徑dlg.m_ofn.lpstrInitialDir="D:\\Program File";

謹記:CFileDialog會改變程序的默認執行路徑,比較穩妥的辦法還是絕對路徑來訪問文件比較好。在程序剛一跑起來的時候,先用GetCurrentDirectory()或是GetModuleFileName()獲得當前可執行文件所在的路徑,並保存起來。以後即使是用CFileDialog改變了當前的路徑,也能很容易地找回來。

  1. CFileDialog Dlg(TRUE,NULL,NULL,0,"ASCII Data Files(*.asc)|*.asc|所有文件 (*.*)|*.*||");  
  2.     char pBuf[MAX_PATH];                                 //存放路徑的變量         
  3.       
  4.     GetCurrentDirectory(MAX_PATH,pBuf);                   //獲取程序的當前目錄  
  5.       
  6.     strcat(pBuf,"\\");  
  7.       
  8.     CString strtemp=pBuf;  
  9.       
  10.   
  11.     Dlg.m_ofn.lpstrInitialDir=pBuf;  

發佈了7 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章