C语言:如何遍历指定的文件夹(可以包括子文件夹)中的每一个文件名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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) '加入list控件中
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追问

我要的是c语言的,谢谢你,但是这不是我需要的!c的关键字中不会出现loop、end的

参考技术A 使用 readdir函数 可以获取文件名追问

需要加那个对应的头文件呢?还是可以直接使用

追答

表头文件 #include
#include
定义函数 struct dirent * readdir(DIR * dir);
函数说明 readdir()返回参数dir目录流的下个目录进入点。
结构dirent定义如下
struct dirent

ino_t d_ino;
ff_t d_off;
signed short int d_reclen;
unsigned char d_type;
har d_name[256;
;
d_ino 此目录进入点的inode
d_off 目录文件开头至此目录进入点的位移
d_reclen _name的长度,不包含NULL字符
d_type d_name 所指的文件类型
d_name 文件名
返回值 成功则返回下个目录进入点。有错误发生或读取到目录文件尾则返回NULL。

参考技术B <html>
<head>
</head>
<body>
<%
dim myfilename()
redim myfilename(0)
set fs=Server.CreateObject("Scripting.FileSystemObject")

sub showfile(thefolder)
set fd=fs.getfolder(thefolder)
for each myfile in fd.files
i=ubound(myfilename)
myfilename(i)=fd.path & "\" & myfile.name
redim Preserve myfilename(i+1)
next
for each myfolder in fd.SubFolders '递归记录其它文件夹的文件
call showfile(fd.path & "\" & myfolder.name)
next
end sub

thefolder="e:\lzweb" '在此指定要搜索的文件夹绝对路径,要确定匿名用户有访问的权限,否则会出错
call showfile(thefolder) '过程调用后,查到的文件名包括路径名保存在myfilename数组,
'共ubound(myfilename)个,下标分布在0至ubound(myfilename)-1;

'以下示例把找到文件显示出来
response.write("共找到" & ubound(myfilename) & "个文件<br>")
for i=0 to ubound(myfilename)-1
response.write(i+1 & "--" & myfilename(i) & "<br>")
next
%>
</body>
</html>
参考技术C 本想写一个,后在百度上搜了一下,还真不少,就给你列出吧。
关于文件夹遍历的问题(有TC/VC两个版本)
http://fwq.web521.com/host/P575/A0748862.shtml

如何在VC中遍历指定文件夹并删除文件名相同而扩展名不同的文件
http://hi.baidu.com/stormsxf/blog/item/94798b24456695024d088d29.html
参考技术D LZ留个邮箱吧,我有一个文件夹复制的程序,应该对你有帮助追问

hlwei83@126.com,不管结果如何先谢谢了,现在vc++的我已经解决了,希望可以得到纯c的!麻烦你了,呵呵!!

追答

已发

追问

有问题,好多的乱码,注释部分也全是诸如“鐢ㄤ簬鑾峰彇鏂囦欢澶瑰悕瀛楋紝濡”之类,不知道是解压的原因还是邮件出了问题

追答

编码的问题,我再给你发一个

本回答被提问者采纳

Python中如何遍历指定目录下的所有文件?

Python中如何遍历指定目录下的所有文件?

例如:在C:\TDDOWNLOAD目录下有a.txt、b.txt两个文件,另有\sub1子文件夹,C:\TDDOWNLOAD\sub1下又有c.txt、d.txt两个文件。

1. os.walk
os.walk()返回一个三元素的tuple:当前路径、子文件夹名称、文件列表。
>>> import os
>>> def fun( path ):
... for root, dirs, files in os.walk( path ):
... for fn in files:
... print root, fn
...
>>> fun( r'C:\TDDOWNLOAD' )
C:\TDDOWNLOAD a.txt
C:\TDDOWNLOAD b.txt
C:\TDDOWNLOAD\sub1 c.txt
C:\TDDOWNLOAD\sub1 d.txt
>>>

2. glob.glob
glob.glob()只接受一个参数,这个参数既代有路径,又代有匹配模式,返回值为一个列表。注意,glob.glob()无法直接穿透子文件夹,需要自己处理:
>>> def fun( path ):
... for fn in glob.glob( path + os.sep + '*' ): # '*'代表匹配所有文件
... if os.path.isdir( fn ): # 如果结果为文件夹
... fun( fn ) # 递归
... else:
... print fn
...
>>> fun( r'C:\TDDOWNLOAD' )
C:\TDDOWNLOAD\a.txt
C:\TDDOWNLOAD\b.txt
C:\TDDOWNLOAD\sub1\c.txt
C:\TDDOWNLOAD\sub1\d.txt
>>>

'*'为匹配模式,代表匹配所有文件,只有这样才能将子文件夹查出来,以便递归深入,探查下一层的文件。

参考资料:http://wenwen.soso.com/z/q212174666.htm

参考技术A os.listdir("目录名") 目录下所有文件名

以上是关于C语言:如何遍历指定的文件夹(可以包括子文件夹)中的每一个文件名的主要内容,如果未能解决你的问题,请参考以下文章

请我如何c语言遍历文件夹

请我如何c语言遍历文件夹

bat命令遍历文件夹下指定后缀的文件但不包括子文件夹

Python中如何遍历指定目录下的所有文件?

golang 获取指定目录下的子文件列表

C#如何遍历指定目录以及指定目录下所有子文件夹,并获取除指定文件类型以外的所有文件的绝对路径?