程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c++文件系統概述(三)

c++文件系統概述(三)

編輯:關於C語言
 

五、文件和目錄管理

4.獲取程序所在的目錄、程序模塊路徑,獲取和設置當前目錄 /* ****************************************************************************  * cur_mod_dir.c 獲取當前是目錄、獲取程序所在目錄,獲取模塊路徑  * ***************************************************************************/ #include <Windows.h> #include <stdio.h> /* *********************************************************************  * int main(void)  * 功能:演示使用設置獲取當前路徑  *          演示獲取模塊路徑  * ********************************************************************/   int main(void) { //用於存儲當前路徑 CHAR szCurrentDirectory[MAX_PATH]; //用於存儲模塊路徑 CHAR szMoudlePath[MAX_PATH]; //Kernel32文件名與句柄 LPSTR szkernel32 = "kernel32.dll"; HMODULE hKernel32; //當前路徑的長度,也用於判斷獲取是否成功 DWORD dwCurDirPathLen;   //獲取進程當前目錄 dwCurDirPathLen = GetCurrentDirectory(MAX_PATH,szCurrentDirectory); if (dwCurDirPathLen == 0) { printf("獲取當前目錄錯誤。\n"); return 0; } printf("進程當前目錄為%s\n",szCurrentDirectory); //將進程當前目錄設置為“C:\” lstrcpy(szCurrentDirectory,"C:\\"); if (!SetCurrentDirectory(szCurrentDirectory)) { printf("設置當前目錄錯誤。\n"); return 0; } printf("已經設置為當前目錄為%s\n",szCurrentDirectory); //在當前目下創建子目錄“current_dir” //運行完成後C:盤下將文件夾“current_dir” CreateDirectory("Current_dir",NULL);   //再次獲取系統當前目錄 dwCurDirPathLen = GetCurrentDirectory(MAX_PATH,szCurrentDirectory); if (dwCurDirPathLen == 0) { printf("獲取當前目錄錯誤。\n"); return 0; } printf("GetCurrentDirectory獲取當親目錄為%s\n",szCurrentDirectory);   //使用NULL參數,獲取本模塊的路徑 if (!GetModuleFileName(NULL,szMoudlePath,MAX_PATH)) { printf("獲取本模塊路徑錯誤!\n"); return 0; } printf("本模塊路徑%s\n",szMoudlePath); //獲取Kernal32.dll的模塊句柄 hKernel32 = LoadLibrary(szkernel32); //使用Kernel32.dll的模塊句柄,獲取其路徑 if (!GetModuleFileName(hKernel32,szMoudlePath,MAX_PATH)) { printf("獲取模塊路徑錯誤。\n"); return 0; } printf("kernel32模塊路徑%s\n",szMoudlePath);   return 0; } 5.查找文件、遍歷指定目錄下的文件和子目錄 /* ***********************************************************************  * sub_dir.c   遍歷目錄下的文件和子目錄  * **********************************************************************/ #include <Windows.h> #include <stdio.h> /* *********************************************************************  * DWORD EnumerateFileInDrectory(LPSTR szPath)  * 功能:遍歷目錄下的文件和子目錄,將顯示  *           文件和文件夾隱藏、加密的屬性  * 參數:LPTSTR szPath,為需遍歷的路徑  * 返回值:0代表執行完成,1代表代碼發生錯誤  * ********************************************************************/ DWORD EnumerateFileInDrectory(LPSTR szPath) { WIN32_FIND_DATA FindFileData; HANDLE hListFile; CHAR szFilePath[MAX_PATH];   //構造代表子目錄和文件夾路徑的字符集,使用通配符“*” lstrcpy(szFilePath,szPath); //注釋的代碼可以用於查找所有以“.txt”結尾的文件 //lstrcat(szFilePath,"\\*.txt"); lstrcat(szFilePath,"\\*"); //查找第一個文件/目錄,獲得查找句柄 hListFile = FindFirstFile(szFilePath,&FindFileData); //判斷句柄 if (hListFile == INVALID_HANDLE_VALUE) { printf("錯誤:%d\n",GetLastError()); return 1; } else { do { /*如果不想顯示本級目錄和上級目錄的“.”和“..”,可以使用注釋部分的代碼過濾 if (lstrcmp(FindFileData.cFileName,TEXT(".")) == 0 || lstrcmp(FindFileData.cFileName,TEXT("..")) == 0) { continue; } */ //打印文件名、目錄名 printf("%s\t\t",FindFileData.cFileName); //判斷文件屬性,是否為加密文件或文件夾 if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_ENCRYPTED) { printf("<加密>"); } //判斷文件屬性,是否為隱藏文件或文件夾 if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) { printf("<隱藏>"); } //判斷文件屬性,是否為目錄 if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { printf("<DIR>"); } //讀者可根據文件屬性自行添加、判斷文件屬性 printf("\n"); } while (FindNextFile(hListFile,&FindFileData)); } return 0; } /* ***********************************************************************************  * int main(int argc,PCHAR argv[])  * 功能:調用ListFileInDrectory  *          遍歷目錄下的文件和子目錄  * 參數:argv[1]為需遍歷的路徑,如果為空則獲取當前路徑  * **********************************************************************************/ int main(int argc,PCHAR argv[]) { if (argc == 2) { EnumerateFileInDrectory(argv[1]); } else { CHAR szCurrentPath[MAX_PATH]; GetCurrentDirectory(MAX_PATH,szCurrentPath); EnumerateFileInDrectory(szCurrentPath); } return 0; } 6.遞歸遍歷目錄樹 /* ***************************************************************  * tree.c  遞歸遍歷目錄樹  * **************************************************************/ /*頭文件*/ #include <Windows.h> #include <stdio.h> /*預處理申明*/ #pragma comment (lib,"user32.lib") /*函數申明*/ DWORD ListAllFileInDrectory(LPSTR szPath); /*全局變量*/ //記錄所有的文件和目錄數 DWORD dwTotalFileNum = 0; /* ************************************************************** * DWORD ListAllFileInDrectory(LPSTR szPath) * 功能:遍歷目錄及所有子目錄,打印路徑 * 參數:LPTSTR szPath 為需遍歷的目錄 * 返回值:0代表執行完成,1代表發生錯誤 ****************************************************************/ DWORD ListAllFileInDrectory(LPSTR szPath) { CHAR szFilePath[MAX_PATH]; WIN32_FIND_DATA FindFileData; HANDLE hListFile; CHAR szFullPath[MAX_PATH]; //構造代表子目錄和文件夾路徑的字符集,使用通配符“*” lstrcpy(szFilePath,szPath); lstrcat(szFilePath,"\\*"); //查找第一個文件目錄,獲得查找句柄 hListFile = FindFirstFile(szFilePath,&FindFileData); if (hListFile == INVALID_HANDLE_VALUE) { printf("錯誤:%d",GetLastError()); return 1; } else { do { //過濾“.”和“..”,不需要遍歷 if (lstrcmp(FindFileData.cFileName,TEXT(".")) == 0 || lstrcmp(FindFileData.cFileName,TEXT("..")) == 0) { continue; } //構造成全路徑 wsprintf(szFullPath,"%s\\%s",szPath,FindFileData.cFileName); dwTotalFileNum++; //打印 printf("\n%d\t%s\t",dwTotalFileNum,szFullPath); //如果是目錄,則遞歸調用,列舉下級目錄 if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { printf("<DIR>"); ListAllFileInDrectory(szFullPath); } } while (FindNextFile(hListFile,&FindFileData)); } return 0; } /* ***************************************************************************************  * int main(int argc,PCHAR argv[])  * 功能:調用ListAllFileInDrectory  *          遍歷目錄下的文件和子目錄  * 參數:argv[1]為需要遍歷的路徑,如果為空則獲取當前路徑  * ***************************************************************************************/ int main(int argc,PCHAR argv[]) { if (argc == 2) { ListAllFileInDrectory(argv[1]); } else { CHAR szCurrentPath[MAX_PATH]; GetCurrentDirectory(MAX_PATH,szCurrentPath); ListAllFileInDrectory(szCurrentPath); } return 0; }  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved