導航:首頁 > 文件類型 > c遞歸遍歷文件夾

c遞歸遍歷文件夾

發布時間:2023-07-15 17:31:34

A. C語言:如何遍歷指定的文件夾(可以包括子文件夾)中的每一個文件名

Function SearchFiles(Path As String, FileType As String)
Dim Files() As String '文件路徑
Dim Folder() As String '文件夾路徑
Dim a, b, c As Long
Dim sPath As String

sPath = Dir(Path & FileType) '查找第一個文件

Do While Len(sPath) '循環到沒有文件為止
a = a + 1
ReDim Preserve Files(1 To a)
Files(a) = Path & sPath '將文件目錄和文件名組合,並存放到數組中
List1.AddItem Files(a) '加入控制項中
sPath = Dir '查找下一個文件
DoEvents '讓出控制權
Loop

sPath = Dir(Path & "\", vbDirectory) '查找第一個文件夾

Do While Len(sPath) '循環到沒有文件夾為止
If Left(sPath, 1) <> "." Then '為了防止重復查找
If GetAttr(Path & "\" & sPath) And vbDirectory Then '如果是文件夾則。。。。。。
b = b + 1
ReDim Preserve Folder(1 To b)
Folder(b) = Path & sPath & "\" '將目錄和文件夾名稱組合形成新的目錄,並存放到數組中
End If
End If
sPath = Dir '查找下一個文件夾
DoEvents '讓出控制權
Loop

For c = 1 To b '使用遞歸方法,遍歷所有目錄
SearchFiles Folder(c), FileType
Next

End Function

Private Sub Command1_Click() '調用
SearchFiles "e:\", "*.exe"
End Sub

B. windows下使用C/C++怎麼遍歷目錄並讀取目錄下的文件列表

//FileScan.cpp:定義控制台應用程序的入口點。
//

#include"stdafx.h"
#include<filesystem>
#include<windows.h>
#defineOK0
#defineERR-1

#defineTEST_FILE_MAX_SIZE"4.67G"

#defineEXT_LEN8
#defineTYPE_LEN8
#defineDIR_MAX_LEN260//文件路徑最多256個字元,加上D:\
//ftell()返回int,最大2G1<<32-1

typedefenumCOND_VALUE
{
COND_VALUE_MORE=0,//大於
COND_VALUE_LESS=1,//小於
COND_VALUE_EUAQL=2,//等於
COND_VALUE_MAX=0xf
}COND_VALUE_E;
typedefenumCOND_TYPE
{
COND_TYPE_SIZE=0,
COND_TYPE_CTIME=1,
COND_TYPE_MTIME=2,
COND_TYPE_EXTNAME=4,
COND_TYPE_FILETYPE=8,
COND_TYPE_MAX=0xf
}COND_TYPE_E;
typedefstructCOND_INFO
{
charcCondType:4;
charcCondValue:4;
}COND_INFO_S;
typedefstructFILE_COND
{
//按照bit位來劃分,前面四個bit位表示條件類型,後面四個bit位表示條件值
charcSymbol;//用來標志大於或者小於,搜索時間,大小,類型,擴展名,屬性
charszRes[3];//預留3個位元組,四位元組對齊
unsignedintuiSizeHigh;//文件大小高位
unsignedintuiSizeLow;//低位
unsignedintuiCStartTime;//創建時間
unsignedintuiCEndTime;
unsignedintuiMStartTime;//修改時間
unsignedintuiMEndTime;
charszExtName[EXT_LEN];//擴展名
charszFileType[TYPE_LEN];//文件類型
unsignedintuiFileAttrib;//文件屬性
unsignedintuiFolderSizeHight;//文件夾大小
unsignedintuiFolderSizeLow;
}FILE_COND_S;

//最大允許多少個條件搜索
#defineCONDITION_MAX4
FILE_COND_Sg_astCond[CONDITION_MAX]={0};
intg_iCondCnt=0;


intDisposeFile(charszFilePath[],WIN32_FIND_DATAstWinFile)
{
DWORDLONGdwHighBase=MAXDWORD;
dwHighBase+=1;
DWORDLONGFileSize=stWinFile.nFileSizeHigh*dwHighBase+stWinFile.nFileSizeLow;
printf("%s\%s--Size:%lu ",szFilePath,stWinFile.cFileName,FileSize);
returnOK;
}

//轉換字元串文件大小(如45.67G)到int類型的文件大小
#defineSECTION_CNT2
#defineMAX_NUM_DEC100
#defineUNIT_CNT4
#defineKB_OFFSET10//1KB==1BIT<<10;
#defineMB_OFFSET20
#defineGB_OFFSET30
#defineTB_OFFSET40
#defineINT_OFFSET32
intConvertSizeStr2SizeLong(charszSizeStr[],unsignedint*puiSizeHigh,unsignedint*puiSizeLow)
{
intaNumSect[SECTION_CNT]={0};//分別存整數位和小數位
//charsz="...";
characValidUint[UNIT_CNT]={'K','M','G','T'};//數組
//characValidUint[]="KMGT";//字元串
characOffset[UNIT_CNT]={KB_OFFSET,MB_OFFSET,GB_OFFSET,TB_OFFSET};
charcOffset=0;
intiBaseNum;

char*pcTmp;
intindex=0;
inti;
intiMask;
//入參判斷
if(szSizeStr==NULL)
{
returnERR;
}

pcTmp=szSizeStr;
while(*pcTmp!=0)
{
if(*pcTmp=='.')
{
index++;
if(index>=SECTION_CNT)
{
returnERR;
}
}
elseif(*pcTmp>='0'&&*pcTmp<='9')
{
//小數位取3位,剩餘的捨去
if(index==1&&aNumSect[index]>MAX_NUM_DEC)
{
pcTmp++;
continue;
}
elseif(index==0&&aNumSect[index]>MAX_NUM_DEC)
{
//1234G不合法,應該寫成1.234T
returnERR;
}
aNumSect[index]=aNumSect[index]*10+*pcTmp-'0';
}
else
{
for(i=0;i<UNIT_CNT;++i)
{
if(toupper(*pcTmp)==acValidUint[i])
{
break;
}
}
if(i==UNIT_CNT)
{
returnERR;
}
}
pcTmp++;
}
if(cOffset==0)
{
*puiSizeHigh=0;
*puiSizeLow=aNumSect[0];
}
else
{
//先轉為下一級單位
iBaseNum=(aNumSect[0]<<KB_OFFSET)+aNumSect[0];//能保證小於MAX_UNIT
cOffset-=KB_OFFSET;
}
iMask=(1<<cOffset)-1;//用於取低於(INT_OFFSET-cOffset)數據
*puiSizeHigh=(iBaseNum>>(INT_OFFSET-cOffset))&iMask;
*puiSizeLow=iBaseNum<<cOffset;
returnOK;
}

//比較文件大小
intCompareFileSize(WIN32_FIND_DATAstWinFile,FILE_COND_SstCond,charcCondValue)
{
switch(cCondValue)
{
caseCOND_VALUE_LESS:
{
if(stWinFile.nFileSizeHigh>stCond.uiSizeHigh)
{
returnERR;
}
elseif(stWinFile.nFileSizeHigh==stCond.uiSizeHigh)
{
if(stWinFile.nFileSizeLow>stCond.uiSizeLow)
{
returnERR;
}
}
break;
}
caseCOND_VALUE_MORE:
{
if(stWinFile.nFileSizeHigh<stCond.uiSizeHigh)
{
returnERR;
}
elseif(stWinFile.nFileSizeHigh==stCond.uiSizeHigh)
{
if(stWinFile.nFileSizeLow<stCond.uiSizeLow)
{
returnERR;
}
}
break;
}
caseCOND_VALUE_EUAQL:
{
if(stWinFile.nFileSizeHigh!=stCond.uiSizeHigh||stWinFile.nFileSizeLow!=stCond.uiSizeLow)
{
returnERR;
}
break;
}
default:
break;
}
returnOK;
}
intCompareFileTime(WIN32_FIND_DATAstWinFile,FILE_COND_SstCond,charcCondValue)
{
returnOK;
}
intCheckCondition(charszFilePath[],WIN32_FIND_DATAstWinFile)
{
inti;
intiCondType;
intiCondValue;
COND_INFO_S*pstCondInfo;

for(i=0;i<g_iCondCnt;++i)
{
pstCondInfo=(COND_INFO_S*)(&(g_astCond[i].cSymbol));
switch(pstCondInfo->cCondType)
{
caseCOND_TYPE_SIZE:
{
if(CompareFileSize(stWinFile,g_astCond[i],pstCondInfo->cCondValue)!=OK)
{
returnERR;
}
break;
}
caseCOND_TYPE_CTIME:
{
if(CompareFileTime(stWinFile,g_astCond[i],pstCondInfo->cCondValue)!=OK)
{
returnERR;
}
break;
}
//...
default:
break;
}
}
returnOK;
}

intScanDir(charszDir[])
{
if(szDir==NULL)
{
returnERR;
}

charszSubDir[DIR_MAX_LEN]={0};
charszFind[DIR_MAX_LEN]={0};

WIN32_FIND_DATAstWinFile;
HANDLEhd;

_snprintf_c(szFind,
DIR_MAX_LEN,
"%s\*",
szDir);//兩個反斜杠表示一個反斜杠轉義符
hd=FindFirstFile(szFind,&stWinFile);//hd標志文件位置,用於查找下一個文件
if(hd==INVALID_HANDLE_VALUE)
{
returnERR;
}

while(1)
{
if(strcmp(stWinFile.cFileName,".")==0||strcmp(stWinFile.cFileName,"..")==0)
{
//NULL
}
//判斷是否是文件夾
elseif(stWinFile.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY)
{
//清空szSubDir,因為在重新對szSubDir賦值時,是直接覆蓋的,後者比當前保存的數據短,所以需要先清空再賦值
memset(szSubDir,0,DIR_MAX_LEN);
_snprintf_c(szSubDir,DIR_MAX_LEN,"%s\%s",szDir,stWinFile.cFileName);
ScanDir(szSubDir);//遞歸處理
}
else
{
if(CheckCondition(szDir,stWinFile)==OK)
{
DisposeFile(szDir,stWinFile);
}
}
//查找下一個文件失敗就跳出循環
if(!FindNextFile(hd,&stWinFile))
{
break;
}
}
FindClose(hd);
returnOK;
}

int_tmain(intargc,_TCHAR*argv[])
{
COND_INFO_SstCond={0};
COND_INFO_S*pstCond;
charszDir[]="C:";
stCond.cCondValue=COND_TYPE_SIZE;
stCond.cCondValue=COND_VALUE_MORE;

if(ConvertSizeStr2SizeLong(TEST_FILE_MAX_SIZE,&(g_astCond[0].uiSizeHigh),&(g_astCond[0].uiSizeLow))==OK)
{
memcpy(&(g_astCond[0].cSymbol),&stCond,1);
pstCond=(COND_INFO_S*)(&g_astCond[0].cSymbol);
g_iCondCnt=1;
ScanDir(szDir);
}
system("pause");
return0;
}

C. 請我如何c語言遍歷文件夾

現成的沒有,給你參考下:

c++:
1、CFileFind類實現遍歷文件,FindNext()查找下一個文件
2、比較文件後綴,符合要求就寫入txt

有不懂得話加Q:2311776177!

D. C語言寫一個遍歷全盤搜索文件並返迴文件路徑的程序

給你一個思路:首先先在C盤尋找沒有,依次再去D,E,F,或軟盤A中尋找
磁碟搜索使用()和FindNextVolume()函數
文件搜索使用FindFirstFileEx()和FindNextFile()函數,
具體的函數使用方法就靠你去查詢MSDN了!
呵呵!當然邏輯上的控制也多好好設計!

E. C# 遍歷文件夾下所有子文件夾中的文件,得到文件名

假設a文件夾在F盤下,代碼如下。將文件名輸出到一個ListBox中
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
DirectoryInfo theFolder = new DirectoryInfo(@"F:\a\");
DirectoryInfo[] dirInfo = theFolder.GetDirectories();
//遍歷文件夾
foreach (DirectoryInfo NextFolder in dirInfo)
{
// this.listBox1.Items.Add(NextFolder.Name);
FileInfo[] fileInfo = NextFolder.GetFiles();
foreach (FileInfo NextFile in fileInfo) //遍歷文件
this.listBox2.Items.Add(NextFile.Name);
}

}
}
}

F. C++遞歸遍歷文件目錄,調試成功,但運行後控制台沒顯示數據,這是為什麼

stringnewpath=folderPath+""+Fileinfo.name;

改為:

stringnewpath=folderPath+"\"+Fileinfo.name;

---------------------------------------------------

while(_findnext(Handle,&Fileinfo));

改為:

while(_findnext(Handle,&Fileinfo)==0);

G. 給出一個文件夾,然後程序遍歷該文件夾,記錄里的所有子文件夾及文件

首先是有一個已知的路徑,現在要遍歷該路徑下的所有文件及文件夾,因此定義了一個列表,用於存放遍歷到的文件名。C#代碼如下:

stringpath="給定的文件夾名稱";
List<string>nameList=newList<string>();
Director(path,nameList);

publicvoidDirector(stringdir,List<string>list)
{
DirectoryInfod=newDirectoryInfo(dir);
FileInfo[]files=d.GetFiles();//文件
DirectoryInfo[]directs=d.GetDirectories();//文件夾
foreach(FileInfofinfiles)
{
list.Add(f.Name);//添加文件名到列表中
}
//獲取子文件夾內的文件列表,遞歸遍歷
foreach(DirectoryInfoddindirects)
{
Director(dd.FullName,list);
}
}
閱讀全文

與c遞歸遍歷文件夾相關的資料

熱點內容
都有哪些批發網站 瀏覽:835
家庭用什麼軟體做電腦編程 瀏覽:774
蘋果手機怎麼把文件壓成7z 瀏覽:597
禁止使用qq瀏覽器代碼 瀏覽:56
怎麼開通移動4g網路 瀏覽:130
岳陽微信公司 瀏覽:96
win10如何從備份中恢復出廠設置密碼 瀏覽:659
什麼軟體修改wifi密碼錯誤 瀏覽:582
遇見不安全網站怎麼辦 瀏覽:251
哪個app有慶余年電視劇 瀏覽:420
iphone5s視頻時很黑 瀏覽:601
js獲取埠號 瀏覽:347
手機短息發的鏈接病毒蘋果手機 瀏覽:724
win10專業忘記家庭組密碼 瀏覽:176
南寧applestore幾樓 瀏覽:296
java字元串怎麼初始化 瀏覽:349
醫美哪個app好 瀏覽:768
代碼編程和機器人編程哪個好 瀏覽:875
90版本男法 瀏覽:796
win10桌面字體難看 瀏覽:848

友情鏈接