搜档网
当前位置:搜档网 › 在VBA遍历文件夹和子文件夹中所有文件

在VBA遍历文件夹和子文件夹中所有文件

在VBA遍历文件夹和子文件夹中所有文件
在VBA遍历文件夹和子文件夹中所有文件

在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。兰色对代码进行了注解,希望对大家有所帮助

第一种方法:使用filesearch对象

Sub mysearch()

Dim fs, i, arr(1 To 10000)

Set fs = Application.FileSearch '设置一个搜索对象

With fs

.LookIn = ThisWorkbook.Path & "/" '设置搜索路径

.Filename = "*.xls" '要搜索文件名和类型

.SearchSubFolders = True '是否需要搜索子文件夹

If .Execute > 0 Then '如果找不到文件

MsgBox "There were " & .FoundFiles.Count & _

" file(s) found." '显示文件找不到

For i = 1 To .FoundFiles.Count '通过循环把所有搜索到的文件存入到数组中

arr(i) = .FoundFiles(i)

Next i

Sheets(1).Range("A1").Resize(.FoundFiles.Count) = Application.Transpose(arr) ' '把数组内的路径和文件名放在单元格中

Else

MsgBox "There were no files found."

End If

End With

End Sub

第二种方法:引用FileSystemObject对象

注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到mis crosoft scription runtime项目并选中

代码及注释:

Dim ArrFiles(1 To 10000) '创建一个数组空间,用来存放文件名称

Dim cntFiles% '文件个数

Public Sub ListAllFiles()

Dim strPath$ '声明文件路径

Dim i%

'Set fso = CreateObject("Scripting.FileSystemObject")

Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象

strPath = ThisWorkbook.Path & "\" '"设置要遍历的文件夹目录

cntFiles = 0

Set fd = fso.GetFolder(strPath) '设置fd文件夹对象

SearchFiles fd '调用子程序查搜索文件

Sheets(1).Range("A1").Resize(cntFiles) = Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中

End Sub

Sub SearchFiles(ByVal fd As Folder)

Dim fl As File

Dim sfd As Folder

For Each fl In fd.Files '通过循环把文件逐个放在数组内

cntFiles = cntFiles + 1

ArrFiles(cntFiles) = fl.Path

Next fl

If fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的Folders 集合

For Each sfd In fd.SubFolders '在Folders 集合进行循环查找

SearchFiles sfd '使用递归方法查找下一个文件夹

Next

End Sub

树的遍历:文件目录结构的显示

数据结构课程设计报告 树的遍历:文件目录结构的显示 专业 计算机科学与技术 学生姓名 **** 班级 计算机*** 学号 ***** 指导教师 徐燕萍 完成日期 2014年7月4日

目录 1、设计内容 (2) 2、设计分析 (3) 2.1建立树形链表结构的函数PARSE() (3) 2.2目录大小重新计算函数RE S IZE() (4) 2.3输出树形结构的函数OUT P UT() (5) 3、设计实践 (5) 4、测试方法 (14) 4.1测试目的 (14) 4.2测试输入 (15) 4.3正确输出 (15) 4.4实际输出 (17) 5 程序运行效果 (19) 5.1测试结果分析 (19) 5.2探讨与改进 (19) 6 设计心得 (20) 1

树的遍历:文件目录结构的显示 1、设计内容 给出Unix下目录和文件信息,要求编程实现将其排列成一定缩进的树。具体要求如下。输入要求: 输入数据包含几个测试方案。每一个案例由几行组成,每一行都代表了目录树的层次结构。第一行代表目录的根节点。若是目录节点,那么它的孩子节点将在第二行中被列出,同时用一对圆括号“()”界定。同样,如果这些孩子节点钟某一个也是目录的话,那么这个目录所包含的内容将在随后的一行中列出,有一对圆括号将首位界定。目录的输入格式为:*name size,文件的输入格式为:name size,其中*代表当前节点的目录,name代表文件或目录的名称,由一串长度不大于10的字符组成,并且name字符串中不能包含有‘(’,‘)’,‘[’,‘]’,‘*’。size是该文件/目录的大小,为大于0的整数。每一个案例中最多只能包含10层,每一层最多有10个文件/目录。 输出要求: 对每一个测试案例,输出时要求:第d层的文件/目录名前面需要插入8*d个空格,兄弟节点之间要在同一列上。不要使用Tab(制表符)来统一输出的缩进。每一个目录的大小(size)是它包含的所有子目录和文件大小以及它自身大小的总和。 输入例子: */usr1 (*mark 1 *alex 1) (hw.c3 *course 1)(hw.c 5) (aa.txt 12) */usr 1 () 表示含有两个不同的根目录,目录名都是/usr,第一个根目录/usr 下包含mark和alex两个子目录,mark目录下包含大小为3的文件hw.c和子目录course,alex目录下有一个大小为5的文件hw.c,子目录course下包含文件aa.txt,其大小为12;第二个根目录/usr下为空。 2

Excel VBA循环语句

l For… next for i=初始值 to 结束值 step 步长值 …… next 具体解释一下,初始值指的是循环开始的值,结束值指的是循环结束的值,实质上就是i值得一个判断,如果i值在起始值和结束值之间,那么进入循环语句,然后i值每运行到next语句后会自动加一个步长值,直至i值超出了初始值到结束值这个范围,循环才会结束。这里要说明一下”step 步长值“往往是省略掉的,省略掉的话,步长取默认值为1。下面将以一段小实例来具体说明这个结构的用法: 实例:在sheet1工作表中一次输出1到10这个数,显示在第一列中。 Sub 循环语句() Dim i As Integer For i = 1 To 10 Step 2 Cells(i, 1) =i Next End Sub Sub 循环语句() Dim i As Integer For i = 10 To 1 Step -1 Cells(i, 1) =i Next End Sub l For each… next For each 对象变量 in 对象集合 …… next 具体解释一下,这里我们看到和上一个结构的而不同的是上面一种结构主要是数值变量,而这种结构是对象变量。什么意思呢?each……in指的是在这个对象集合里面,一次将每一个对象都遍历一边。同样的道理,执行到next后对象自动指到下一个。具体我们来看一下下面的一个实例吧 实例:给一个数据区域内的所有单元格赋值,从1开始。 Sub 循环语句() Dim i As Integer For Each c In Range("a1:c5") i = i + 1 c.Value = i Next End Sub

Excel VBA实例教程 #056:遍历工作表中的图形

工作表中的多个图形,如果使用系统缺省名称,如“文本框1”、“文本框2”这样前面是固定的字符串,后面是序号的,可以使用For...Next 语句遍历图形,如下面的代码所示。 1.Sub ErgShapes_1() 2. Dim i As Integer 3. For i = 1 To 4 4. Sheet1.Shapes("文本框 " & i).TextFrame.Characters.Text = "" 5. Next 6.End Sub 代码解析: ErgShapes_1过程清除工作表中四个图形文本框中的文字。 第3行到第5行代码,使用Shapes属性在工作表上的三个图形文本框中循环。 Shapes属性返回Shapes对象,代表工作表或图形工作表上的所有图形,可以使用Shapes(index)返回单个的Shape对象,其中index是图形的名称或索引号。 返回单个的Shape对象后使用TextFrame 属性和Characters方法清除文本框中的字符,关于Shape对象的TextFrame 属性和Characters方法请参阅技巧53 。 如果图形的名称没有规律,可以使用For Each...Next 语句循环遍历所有图形,根据Type属性返回的图形类型进行相应的操作,如下面的代码所示。 1.Sub ErgShapes_2() 2. Dim myShape As Shape 3. Dim i As Integer 4. i = 1 5. For Each myShape In Sheet1.Shapes 6. If myShape.Type = msoTextBox Then 7. myShape.TextFrame.Characters.Text = "这是第" & i & "个文本框" 8. i = i + 1 9. End If 10. Next 11.End Sub 代码解析: ErgShapes_2过程在工作表中的所有图形文本框中写入文本。 第5行代码使用For Each...Next 语句循环遍历工作表中所有的图形对象。 第6行到第9行代码如果图形对象是文本框则在文本框中写入文本。其中第6行代码根据Type属性判断图形对象是否为文本框,应用于Shape对象的Type属性返回或设置图形类型,MsoShapeType类型,请参阅表格54 1 。

Linux C :遍历输出指定目录下的所有文件

Linux C :遍历输出指定目录下的所有文件 在Linux下opendir()、readdir()和closedir()这三个函数主要用来遍历目录。在使用这三个函数前必须先包括以下两个头文件: #include #include opendir函数的原型为: DIR *opendir(const char *name); 它返回一个DIR*类型,这就是一个句柄啦,你不用管它的内部结构是什么样的,只要知道这个句柄就是等一下要传给readdir()函数的参数就行了。 readdir函数的原型为: struct dirent *readdir(DIR *dir); 看它的参数就知道该参数是opendir函数返回的句柄,而该函数的返回值是struct dirent* 类型,这里我们必须了解一下这个结构体: struct dirent { ino_t d_ino; /* inode number */ off_t d_off; /* offset to the next dirent */ unsigned short d_reclen; /* length of this record */ unsigned char d_type; /* type of file */ char d_name[256]; /* filename */ }; 这个结构体的d_name存放的就是文件的名字,这里的文件包括普通文件,目录文件等等,在linux的思想中,所有的东西都是文件。 closedir函数的原型为: int closedir(DIR *dir); 这个函数就不用多说了,一般有开(open),就有关(close),这样的结构经常可出看到,如fopen,fclose等等。 三个函数介绍完了,直接来一个例子吧: SearchDir.c#include #include #include #include #include char filename[256][256]; int len = 0; int trave_dir(char* path, int depth) { DIR *d; //声明一个句柄 struct dirent *file; //readdir函数的返回值就存放在这个结构体中 struct stat sb;

C#读写文件、遍历文件、打开保存文件

C#读写文件、遍历文件、打开保存文件 using System; using System.Collections.Generic; using https://www.sodocs.net/doc/a59523411.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespaceFileReadWriteDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //遍历文件- 浏览按钮 private void buttonBrowse_Click(object sender, EventArgs e) { OpenFileDialogofd = new OpenFileDialog(); ofd.Filter = "(*.*)|*.*"; //过滤文件类型 ofd.RestoreDirectory = true; //记忆上次浏览路径 if(ofd.ShowDialog() == DialogResult.OK) { DirectoryInfodir = Directory.GetParent(ofd.FileName); //获取文件所在的父目录 textBox1.Text = dir.ToString()+"\\"; } } //遍历文件- 遍历按钮 private void buttonTransform_Click(object sender, EventArgs e) { listBox1.Items.Clear();

ExcelVBA中for循环语句地用法

Excel VBA中for循环语句的用法 听语音 ? ?| ?浏览:21306 ?| ?更新:2015-05-30 16:57 ?| ?标签:excel ?1 ?2 ?3 ?4 ?5 ?6 分步阅读 for循环语句在VBA中扮演着比较重要的角色,为我们批量的处理表格数据提供了一个很好的途径,下面小编根据自己的一些亲身经验为大家分享一下Excel VBA中for循环语句的两个用法吧!

?office Excel软件 ?具备一定的VB基础更好 1. 1 我们常用的for循环语句有两种,一个是for ……next结构;一个是For each……next结构。这两种结构主要都是针对多数据循环遍历的时候用到的。 那么下面我将分别来介绍一下两种循环结构的具体用法,首先还是要打开VBA编辑器 2. 2 1.for……next结构 这个结构一般是这样的: for i=初始值to 结束值step 步长值 ……

next 具体解释一下,初始值指的是循环开始的值,结束值指的是循环结束的值,实质上就是i值得一个判断,如果i值在起始值和结束值之间,那么进入循环语句,然后i值每运行到next语句后会自动加一个步长值,直至i值超出了初始值到结束值这个围,循环才会结束。这里要说明一下”step 步长值“往往是省略掉的,省略掉的话,步长取默认值为1。下面将以一段小实例来具体说明这个结构的用法: 实例:在sheet1工作表中一次输出1到10这个数,显示在第一列中。 程序: Sub 循环语句() Dim i As Integer For i = 1 To 10 Cells(i, 1) = i Next End Sub

C#遍历目录下的所有文件夹

//这个是网上转的上一个也是仿照这个改的同样是win32控制台程序学习! using System; using System.Collections.Generic; using System.Text; using System.IO; namespace TestFileInfo { class Program { static void Main(string[] args) { string pathNames=null; do { Console.Write("请输入目录路径名(输入x退出程序):"); pathNames = Console.ReadLine(); if ((pathNames == "X") || (pathNames == "x")) break; DirectoryInfo dirPath = new DirectoryInfo(pathNames); CDirectoryInfo dirObject = new CDirectoryInfo(); Console.Write(dirObject.GetDirectoryInfos(dirPath)); Console.WriteLine("______________________________________________ ________/n"); //dirObject.pathNameProp = null; //Console.Write(dirObject.GetDirectoryInfos(pathNames)); //Console.WriteLine("_____________________________________________ ________"); } while (true);//((pathName == "X") || (pathName == "x")); Console.Write("/n程序已终止,按任意键退出程序!"); Console.ReadKey(); } }

Excel VBA常用技巧代码

1.删除重复行 (1) 2.ActiveX控件的相关操作 (2) 3.单元格内容匹配 (2) 4.单元格填充公式 (3) 5.弹出打开对话框 (3) 6.操作文件夹下的所有工作簿 (3) 7.获取数据区域的最后一行和最后一列 (4) 8.获取列的字母顺序[A~IV] (4) 9.自定义函数返回数组并填充至单元格区域 (4) 10.绘制曲线图 (5) 11.单元格区域拷贝 (6) 12.操纵数据库(查、增、删、改) (6) 13.待定XX (7) 1.删除重复行 关键字:[a65536].End(xlUp).Row、Offset()、相关双层循环 Sub RemoveDuplicate() '删除重复行 For i = [a65536].End(xlUp).Row - 1 To 1 Step -1 '按倒叙删除 For j = [a65536].End(xlUp).Row To i + 1 Step -1 If Cells(i, 1).Value = Cells(j, 1).Value Then Rows(i).Delete End If Next Next End Sub Sub RemoveItem() '删除相邻重复,但不删除隔行重复 Dim i As Long With Range("A2") '以A2为基准进行单元格偏移 Do While .Offset(i, 0) If .Offset(i, 0).Value = .Offset(i - 1, 0).Value Then .Offset(i, 0).EntireRow.Delete i = i + 1 Loop End With End Sub

VBA文件及文件夹操作

VBA文件及文件夹操作 1.VBA操作文件及文件夹 on error resume next下测试 A,在D:\下新建文件夹,命名为folder 方法1:MkDir "D:\folder" 方法2:Set abc = CreateObject("Scripting.FileSystemObject") abc.CreateFolder ("D:\folder") B,新建2个文件命名为a.xls和b.xls Workbooks.Add ActiveWorkbook.SaveAs Filename:="D:\folder\a.xls" ActiveWorkbook.SaveAs Filename:="D:\folder\b.xls" C,创建新文件夹folder1并把a.xls复制到新文件夹重新命名为c.xls MkDir "D:\folder1" FileCopy "D:\folder\a.xls", "D:\folder1\c.xls" D,复制folder中所有文件到folder1 Set qqq = CreateObject("Scripting.FileSystemObject") qqq.CopyFolder "D:\folder", "D:\folder1" D,重命名a.xls为d.xls name "d:\folder1\a.xls" as "d:\folder1\d.xls" E,判断文件及文件夹是否存在 Set yyy = CreateObject("Scripting.FileSystemObject")

If yyy.FolderExists("D:\folder1) = True Then ... If yyy.FileExists("D:\folder1\d.xls) = True Then ... F,打开folder1中所有文件 Set rrr = CreateObject("Scripting.FileSystemObject") Set r = rrr.GetFolder("d:\folder1") For Each i In r.Files Workbooks.Open Filename:=("d:\folder1\" + https://www.sodocs.net/doc/a59523411.html, + "") Next G,删除文件c.xls kill "d:\folder1\c.xls" H,删除文件夹folder Set aaa = CreateObject("Scripting.FileSystemObject") aaa.DeleteFolder "d:\folder" 2.8excel vba一次性获取文件夹下的所有文件名的方法 小生今天上网下载了一个财务常用报表的文件包,里面有几百个excel工作表,要是手工一个一个的获得文件名的话,那我可是要忙十天半月哦。于是想到昨论坛就是vba论坛,昨不充分利用excel 自身的高级应用呀,呵呵,实现的代码如下,把工作量几天的任务可是一下子就完成了,这就是excel vba 给你工作提高效率的结果! excle vba自动获取同一文件夹下所有工作表的名称红色代码: 按Alt+F11,打开VBA编辑器,插入一个模块,把下面的代码贴进去,按F5执行 Sub t() Dim s As FileSearch '定义一个文件搜索对象

用vba遍历文件夹和子文件夹中的所有文件

在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth 对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。兰色对代码进行了注解,希望对大家有所帮助 第二种方法:引用FileSystemObject对象 注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到miscrosoft scription runtime项目并选中 代码及注释: Dim ArrFiles(1 To 10000) '创建一个数组空间,用来存放文件名称 Dim cntFiles% '文件个数 Public Sub ListAllFiles() Dim strPath$ '声明文件路径 Dim i% 'Set fso = CreateObject("Scripting.FileSystemObject") Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象 strPath = ThisWorkbook.Path & "\" '"设置要遍历的文件夹目录 cntFiles = 0 Set fd = fso.GetFolder(strPath) '设置fd文件夹对象 SearchFiles fd '调用子程序查搜索文件 Sheets(1).Range("A1").Resize(cntFiles) = Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中 End Sub Sub SearchFiles(ByVal fd As Folder) Dim fl As File Dim sfd As Folder For Each fl In fd.Files '通过循环把文件逐个放在数组内 cntFiles = cntFiles + 1 ArrFiles(cntFiles) = fl.Path Next fl If fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的Folders 集合 For Each sfd In fd.SubFolders '在Folders 集合进行循环查找 SearchFiles sfd '使用递归方法查找下一个文件夹 Next End Sub

Excel VBA编程 For Each...Next

Excel VBA编程For Each...Next For Each…Next语句会重复一个语句块,而它是作用于集合中的每个对象或是数组中的每个元素。当循环执行一次则Visual Basic会自动设置一个变量。 语法: For Each element In group [statements] [Exit For] [statements] Next [element] 在该语句中,主要包含3个参数,其功能如下: ●element 必要参数。用来遍历集合或数组中所有元素的变量。对于集合来说,element可能是一 个Variant变量、一个通用对象变量或任何特殊对象变量。对于数组而言,element只能是一个 Variant变量。 ●group 必要参数。表示对象集合或数组的名称(用户定义类型的数组除外)。 ●statements 可选参数,针对group中的每一项执行的一条或多条语句。 Dim s(2) s(0) = "000000": s(1) = "1111111": s(2) = "222222222" For Each f In s MsgBox f Next 在使用For Each...Next语句过程中,应注意以下几点内容: ●如果集合中至少有一个元素,就会进入For…Each块执行。一旦进入循环,便先针对group中第 一个元素执行循环中的所有语句。如果group中还有其它的元素,则会针对它们执行循环中的语 句,当group中的所有元素都执行完了,便会退出循环,然后从Next语句之后的语句继续执行。 ●在循环中可以在任何位置放置任意个Exit For语句,随时退出循环。 ●可以将一个For…Each…Next循环放在另一个之中来组成嵌套式For…Each…Next 循环。但是每 个循环的element必须是唯一的。

c#遍历一个文件夹下的所有文件包括子文件夹

c#遍历一个文件夹下的所有文件包括子文件夹 using System; using System.IO; class ListAllFilesDemo { public static void Main() { Console.Write( "请输入要查询的目录: "); string dir = Console.ReadLine(); try { ListFiles(new DirectoryInfo(dir)); } catch(IOException e) { Console.WriteLine(e.Message); } } public static void ListFiles(FileSystemInfo info)

{ if (!info.Exists) return; else { DirectoryInfo dirInfo = info as DirectoryInfo; if (dirInfo != null) { foreach (var file in dirInfo.GetFileSystemInfos()) { FileInfo fileInfo = file as FileInfo; if (fileInfo != null) Console.WriteLine(fileInfo.FullName); else { listFiles(file as DirectoryInfo); } } }

} } } C#中遍历目录下的目录的文件(二) 1、遍历一个目录下的全部目录,要用到System.IO.DirectoryInfo 类的GetDirectories方法: DirectoryInfo dir = new DirectoryInfo(@"c:\"); foreach(DirectoryInfo dChild in dir.GetDirectories("*")) {//如果用GetDirectories("ab*"),那么全部以ab开头的目录会被显示 Response.Write(https://www.sodocs.net/doc/a59523411.html, + "
");//打印目录名 Response.Write(dChild.FullName + "
");//打印路径和目录名} 2、遍历一个目录下的全部文件,要用到System.IO.DirectoryInfo 类的GetFiles方法: DirectoryInfo dir = new DirectoryInfo(@"c:\"); foreach(DirectoryInfo dChild in dir.GetFiles("*")) {//如果用GetFiles("*.txt"),那么全部txt文件会被显示 Response.Write(https://www.sodocs.net/doc/a59523411.html, + "
");//打印文件名

递归遍历目录的实现(c)

由于工作中需要使用到遍历目录,所以就自己收集整理相关资料,写了下面的函数,希望对大家有所帮助。 #include #include #include #include //将数组myarray的内容复制到数组S中 void initarray(char s[],char myarray[]) { int i; for(i=0;i

VB6遍历文件夹

//思路: 使用FINDFIRST FINDNEXT 函数递归实现查找 /* 在VB中WIN32_FIND_DATA 的 cFileName 返回的总是256个字符即MAX_PATH长度的字符,其中包含文件名和空格,需用getstr 获取取中的文件名 */ ’程序: '引用 microsft scripting runtime Dim file As New FileSystemObject Dim txtstream As TextStream Public Sub cbfindfile(str2 As String) fext = getext(str2) If (LCase(fext) = "cpp" Or LCase(fext) = "h" Or LCase(fext) = "inc" Or LCase(fext) = "txt" Or LCase(fext) = "doc") Then Set txtstream = file.OpenTextFile(str2, ForReading) strtxt = LCase(txtstream.ReadAll) pos = InStr(1, strtxt, "p0", 1) '查找的内容 If (pos <> 0) Then Form1.List1.AddItem str2 End If End If End Sub Private Sub Command1_Click() findfile "d:\51" End Sub

’模块文件: Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long '查找下一个文件的API Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long '获取文件属性的API Public Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long '关闭查找文件的API Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long Const MAX_PATH = 260 Const MAXDWORD = &HFFFF Const FILE_ATTRIBUTE_DIRECTORY = &H10 Public Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Dim tempstr As String '定义类(用于查找文件) Public Type WIN32_FIND_DATA dwFileAttributes As Long ftCreationTime As FILETIME ftLastAccessTime As FILETIME ftLastWriteTime As FILETIME nFileSizeHigh As Long

使用boost中的filesystem类库遍历某个目录所有的文件

使用boost中的filesystem类库遍历某个目录所有的文件 #include #include 使用boost中的filesystem类库遍历某个目录所有的文件 int GetAllFileOfPath(const string strPath) { namespace fs = boost::filesystem; // 得到配置文件夹. if ( strPath.size() < 2 ) { return 0; } fs::path full_path( fs::initial_path() ); full_path = fs::system_complete( fs::path( strPath, fs::native ) ); unsigned long file_count = 0; unsigned long dir_count = 0; unsigned long err_count = 0; if ( !fs::exists( full_path ) ) { std::cout << "找不到配置文件目录,请检查该目录是否存在:" std::cout << full_path.native_file_string() << std::endl; return -1; } // 遍历配置文件所在的文件夹,得到所有的配置文件名. if ( fs::is_directory( full_path ) ) { fs::directory_iterator end_iter; for ( fs::directory_iterator dir_itr( full_path ); dir_itr != end_iter; ++dir_itr ) { try { if ( fs::is_directory( *dir_itr ) ) {

VBA遍历所有文件夹的两种方法(filesearch和FileSystemObject)

VBA遍历所有文件夹的两种方法(filesearch和FileSystemObject) 在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。兰色对代码进行了注解,希望对大家有所帮助 第一种方法:使用filesearch对象 Sub mysearch() Dim fs, i, arr(1 To 10000) Set fs = Application.FileSearch '设置一个搜索对象 With fs .LookIn = ThisWorkbook.Path & "/" '设置搜索路径 .Filename = "*.xls" '要搜索文件名和类型 .SearchSubFolders = True '是否需要搜索子文件夹 If .Execute > 0 Then '如果找不到文件 MsgBox "There were " & .FoundFiles.Count & _ " file(s) found." '显示文件找不到 For i = 1 To .FoundFiles.Count '通过循环把所有搜索到的文件存入到数组中 arr(i) = .FoundFiles(i) Next i Sheets(1).Range("A1").Resize(.FoundFiles.Count) = Application.Transpose(arr) ' '把数组内的路径和文件名放在单元格中 Else MsgBox "There were no files found." End If End With End Sub 第二种方法:引用FileSystemObject对象 注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到miscrosoft scription runtime项目并选中 代码及注释: Dim ArrFiles(1 To 10000) '创建一个数组空间,用来存放文件名称 Dim cntFiles% '文件个数 Public Sub ListAllFiles() Dim strPath$ '声明文件路径 Dim i% 'Set fso = CreateObject("Scripting.FileSystemObject") Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象 strPath = ThisWorkbook.Path & "/" '"设置要遍历的文件夹目录 cntFiles = 0 Set fd = fso.GetFolder(strPath) '设置fd文件夹对象 SearchFiles fd '调用子程序查搜索文件 Sheets(1).Range("A1").Resize(cntFiles) = Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中 End Sub Sub SearchFiles(ByVal fd As Folder) Dim fl As File Dim sfd As Folder For Each fl In fd.Files '通过循环把文件逐个放在数组内 cntFiles = cntFiles + 1 ArrFiles(cntFiles) = fl.Path Next fl If fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的Folders 集合 For Each sfd In fd.SubFolders '在Folders 集合进行循环查找 SearchFiles sfd '使用递归方法查找下一个文件夹 Next End Sub

c#遍历一个文件夹下的所有文件包括子文件夹

using System; using System.IO; class ListAllFilesDemo { public static void Main() { Console.Write( "请输入要查询的目录: "); string dir = Console.ReadLine(); try { ListFiles(new DirectoryInfo(dir)); } catch(IOException e) { Console.WriteLine(e.Message); } } public static void ListFiles(FileSystemInfo info) { if(!info.Exists) return; DirectoryInfo dir = info as DirectoryInfo; //不是目录 if(dir == null) return; FileSystemInfo [] files = dir.GetFileSystemInfos(); for(int i = 0; i < files.Length; i++) { FileInfo file = files[i] as FileInfo; //是文件 if(file != null)

Console.WriteLine(file.FullName + "\t " + file.Length); //对于子目录,进行递归调用 else ListFiles(files[i]); } } } C#中遍历目录下的目录的文件(二) 1、遍历一个目录下的全部目录,要用到System.IO.DirectoryInfo 类的GetDirectories方法: DirectoryInfo dir = new DirectoryInfo(@"c:\"); foreach(DirectoryInfo dChild in dir.GetDirectories("*")) {//如果用GetDirectories("ab*"),那么全部以ab开头的目录会被显示 Response.Write(https://www.sodocs.net/doc/a59523411.html, + "
");//打印目录名 Response.Write(dChild.FullName + "
");//打印路径和目录名} 2、遍历一个目录下的全部文件,要用到System.IO.DirectoryInfo 类的GetFiles方法: DirectoryInfo dir = new DirectoryInfo(@"c:\"); foreach(DirectoryInfo dChild in dir.GetFiles("*")) {//如果用GetFiles("*.txt"),那么全部txt文件会被显示 Response.Write(https://www.sodocs.net/doc/a59523411.html, + "
");//打印文件名 Response.Write(dChild.FullName + "
");//打印路径和文件名}

用vba遍历文件夹和子文件夹中的所有文件

精品文档 在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth 对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。兰色对代码进行了注解,希望对大家有所帮助 第二种方法:引用FileSystemObject对象 注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到miscrosoft scription runtime项目并选中 代码及注释: Dim ArrFiles(1 To 10000) '创建一个数组空间,用来存放文件名称 Dim cntFiles% '文件个数 Public Sub ListAllFiles() Dim strPath$ '声明文件路径 Dim i% 'Set fso = CreateObject("Scripting.FileSystemObject") Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象 strPath = ThisWorkbook.Path & "\" '"设置要遍历的文件夹目录 cntFiles = 0 Set fd = fso.GetFolder(strPath) '设置fd文件夹对象 SearchFiles fd '调用子程序查搜索文件 Sheets(1).Range("A1").Resize(cntFiles) = Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中 End Sub Sub SearchFiles(ByVal fd As Folder) Dim fl As File Dim sfd As Folder For Each fl In fd.Files '通过循环把文件逐个放在数组内 cntFiles = cntFiles + 1 ArrFiles(cntFiles) = fl.Path Next fl If fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的Folders 集合 For Each sfd In fd.SubFolders '在Folders 集合进行循环查找 SearchFiles sfd '使用递归方法查找下一个文件夹 Next End Sub .

相关主题