① windows下使用C/C++怎麼遍歷目錄並讀取目錄下的文件列表
用C的函數實現,windows ,linux 都能用
#include<iostream>
#include<io.h>
#include<string>
usingnamespacestd;
voiddir(stringpath)
{
longhFile=0;
struct_finddata_tfileInfo;
stringpathName,exdName;
//\*代表要遍歷所有的類型
if((hFile=_findfirst(pathName.assign(path).append("\*").c_str(),&fileInfo))==-1){
return;
}
do
{
//判斷文件的屬性是文件夾還是文件
cout<<fileInfo.name<<(fileInfo.attrib&_A_SUBDIR?"[folder]":"[file]")<<endl;
}while(_findnext(hFile,&fileInfo)==0);
_findclose(hFile);
return;
}
intmain()
{
//要遍歷的目錄
stringpath="E:\work\\test4";
dir(path);
system("pause");
return0;
}
② cmd遍歷刪除目錄下所有空文件夾
for /f "delims=" %%i in ('dir /s /ad "c:\hello"') do rd "%%i"
::rd不加參數只能刪除空文件夾
::刪除c:\hello文件夾下所有的空文件夾,可以自定義要刪除的目錄
③ MFC怎麼查找當前目錄以及子目錄下的*_DS.TXT文件
在應用程序的開發過程中,會遇到如何查找某一文件以確定此文件路徑的問題。利用CFileFind類可以比較方便地在當前目錄下進行文件查找,但卻不能對其子目錄中的文件進行搜尋。而實際應用中往往需要對某一整個目錄樹,甚至是整個C盤或D盤驅動器進行文件搜尋。通過實踐,我們在Visual C++ 6.0中編程實現了如何遍歷任意目錄樹,以查找某一特定的文件。
在下面的具體陳述中可以看到,在確定要查找的文件名和要進行搜索的目錄的名稱後,將調用函數Search_Directory進行文件的查找。首先依次查找當前目錄下的每一個實體(文件或是子目錄),如果是某一子目錄,則進入該子目錄並遞歸調用函數Search_Dirctory進行查找,查找完畢之後, 再返回上一級目錄;如果不是子目錄而是某一文件,則判斷其是否就是我們要查找的文件,如果是則輸出其完整的文件路徑。這樣,通過Search_Directory函數的反復遞歸調用,就可以實現對整個目錄,包括子目錄的遍歷搜索。下面將舉例詳細講述如何在VC++中編程實現在整個目錄樹中的文件查找。
1. 在Visual C++ 6.0中用默認方式創建了一基於對話框的應用程序Search。在主窗口對話框上放置一命令按鈕,其Caption為「Search File」,ID為ID_BUTTON_SEARCH。單擊此按鈕將完成文件的查找工作。
2. 利用ClassWizard為「Search File」按鈕的BN_CLICKED 事件添加處理函數OnButtonSearch,代碼如下:
#include 〈direct.h〉
#include 〈io.h〉
void CSearchDlg::OnButtonSearch()
{
 // TODO: Add your control notification handler code here
 char szFilename[80];
 // 字元串 szFilename 表示要查找的文件名
 strcpy(szFilename,"Mytext.txt");
 _chdir("d:\\"); // 進入要查找的路徑(也可為某一具體的目錄)
 // 查找文件, 如果查到則顯示文件的路徑全名
 Search_Directory(szFilename);
 // 為CSearchDlg類的一成員函數
 MessageBox(″查找文件完畢!″);
 // 顯示查找完畢的信息
}
3. 在CSearchDlg類中增加成員函數Search_Directory,它將完成具體的文件查找工作,代碼如下:
void CSearchDlg::Search_Directory(char* szFilename)
{
 long handle;
 struct _finddata_t filestruct;
 //表示文件(或目錄)的信息
 char path_search[_MAX_PATH];
 //表示查找到的路徑結果
 // 開始查找工作, 找到當前目錄下的第一個實體(文件或子目錄),
 // "*"表示查找任何的文件或子目錄, filestruct為查找結果
 handle = _findfirst("*", &filestruct);
 // 如果handle為-1, 表示當前目錄為空, 則結束查找而返回
 if((handle == -1)) return;
 // 檢查找到的第一個實體是否是一個目錄(filestruct.name為其名稱)
 if( ::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY )
 {
 // 如果是目錄, 則進入該目錄並遞歸調用函數Search_Dirctory進行查找,
 // 注意: 如果目錄名的首字元為'.'(即為"."或".."), 則不用進行查找
 if( filestruct.name[0] != '.' )
 {
 _chdir(filestruct.name);
 Search_Directory(szFilename);
 // 查找完畢之後, 返回上一級目錄
 _chdir("..");
 }
 }
 else // 如果第一個實體不是目錄, 則檢查是否是要查找的文件
 {
 // stricmp對兩字元串進行小寫形式的對比, 返回為0表示完全一致
 if( !stricmp(filestruct.name, szFilename) )
 {
 // 先獲得當前工作目錄的全路徑
 _getcwd(path_search,_MAX_PATH);
 // 再獲得文件的完整的路徑名(包含文件的名稱)
 strcat(path_search,"\\");
 strcat(path_search,filestruct.name);
 MessageBox(path_search); //輸出顯示
 }
 }
 // 繼續對當前目錄中的下一個子目錄或文件進行與上面同樣的查找
 while(!(_findnext(handle,&filestruct)))
 {
 if( ::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY )
 {
 if(*filestruct.name != '.')
 {
 _chdir(filestruct.name);
 Search_Directory(szFilename);
 _chdir("..");
 }
 }
 else
 {
 if(!stricmp(filestruct.name,szFilename))
 {
 _getcwd(path_search,_MAX_PATH);
 strcat(path_search,"\\");
 strcat(path_search,filestruct.name);
 MessageBox(path_search);
 }
 }
 }
 _findclose(handle);
 // 最後結束整個查找工作
}
這樣我們就可以對整個目錄進行遍歷搜索,查找某一特定的文件,並輸出顯示其完整的文件路徑。以上的程序在Visual C++ 6.0中已調試通過。