导航:首页 > 文件类型 > 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递归遍历文件夹相关的资料

热点内容
逍遥安卓微信验证 浏览:579
5g网络什么时候普及河北邢台 浏览:709
编程和运营哪个更适合创业 浏览:893
尤里x怎么升级 浏览:399
做业务绩效考核需要哪些数据 浏览:433
dnf85版本剑魔刷图加点 浏览:407
手机硬盘测试架可以读取哪些数据 浏览:704
ug前后处理结算结果找不到文件 浏览:769
网页框架拆分代码 浏览:382
未来十年网络安全有什么影响 浏览:362
win10更新后进不了剑灵 浏览:243
iphone471激活出错 浏览:648
怎么把文件拷到u盘 浏览:620
中伊签署文件视频 浏览:661
电信光宽带网络不稳定 浏览:504
网络岗软路由 浏览:995
黑莓z10在哪里下载app 浏览:310
net批量下载文件 浏览:696
怎么把苹果一体机文件拷贝 浏览:117
sql文件怎么写 浏览:9

友情链接