Linux C :遍历输出指定目录下的所有文件
LinuxC讲解系统调用readdir,readdir_r以及如何遍历目录下的所有文件
![LinuxC讲解系统调用readdir,readdir_r以及如何遍历目录下的所有文件](https://img.taocdn.com/s3/m/a921b418591b6bd97f192279168884868762b88c.png)
LinuxC讲解系统调⽤readdir,readdir_r以及如何遍历⽬录下的所有⽂件readdir与readdir_r简要说明readdir可以⽤来遍历指定⽬录路径下的所有⽂件。
不过,不包含⼦⽬录的⼦⽂件,如果要递归遍历,可以使⽤深度遍历,或者⼴度遍历算法。
readdir_r 是readdir的可重⼊版本,线程安全。
readdir因为直接返回了⼀个static的struct dirent,因此是⾮线程安全。
readdir如何遍历⽬录⼦⽂件?1. opendir打开⽬录opendir有2个版本:opendir,fopendir。
前者参数为⽬录对应字符串,后者参数为⽬录对应已打开⽂件描述符。
#include <sys/types.h>#include <dirent.h>DIR *opendir(const char *name);DIR *fdopendir(int fd);⽤法模型:DIR *dirp;const char *base_dir = "/home/martin/document";if ((dirp = opendir(base_dir)) != NULL) {perror("opendir error");return -1;}// 调⽤readdir遍历⽬录⼦⽂件...closedir(base_dir);2. readdir遍历⽬录⼦⽂件readdir需要⼀个已打开(调⽤opendir)的DIR对象作为参数。
#include <dirent.h>struct dirent *readdir(DIR *dirp);int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);dirent 结构定义struct dirent {ino_t d_ino; /* inode number i节点编号 */off_t d_off; /* not an offset; see NOTES 早期⽂件系统中,telldir返回⽂件在⽬录内的偏移 */unsigned short d_reclen; /* length of this record dirent 记录的实际长度 */unsigned char d_type; /* type of file; not supportedby all filesystem types ⽂件类型 */char d_name[256]; /* filename ⽂件名 */};成员介绍:d_ino i节点编号,操作系统⽤来识别⽂件的,每个⽂件都有⼀个inode number(参见)d_off 早期⽂件系统中,⽂件系统使⽤平⾯表格,telldir返回⽂件在⽬录内的偏移,⽽d_off就代表这个偏移的缓存。
Linux下C语言获取目录中的文件列表
![Linux下C语言获取目录中的文件列表](https://img.taocdn.com/s3/m/c463f1fbba0d4a7302763a9d.png)
stat(path,&info);
if(S_ISDIR(info.st_mode))
printf("This is a directory");
stat结构及其域如下所示:
struct stat {
dev_t st_dev; /* ID of device containing file */
DIR * opendir(const char * name);
函数说明
opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。
返回值
成功则返回DIR*型态的目录流,打开失败则返回NULL。
错误代码
EACCESS权限不足
Linux下C语言获取目录中的文件列表
分类:编程语言
代码如下:Linux下使用GCC编译即可
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <stdio.h>
int main(){
DIR *dir;
struct dirent *ptr;
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};
如下的Posix宏用于检测st_mode域的Байду номын сангаас件类型:
linux导出路径
![linux导出路径](https://img.taocdn.com/s3/m/6447662811a6f524ccbff121dd36a32d7375c78c.png)
linux导出路径
在Linux中,路径是指文件或目录在文件系统中的位置。
了解如何导出路径非常有用,可以帮助您更快地找到文件或目录,以及在执行某些操作时提供正确的路径。
以下是在Linux中导出路径的方法:
1. 使用pwd命令:pwd命令可以显示当前工作目录的完整路径。
只需在终端中输入pwd,然后按Enter键即可显示当前目录的完整路径。
2. 使用cd命令:cd命令可以更改当前工作目录。
如果您想导出某个目录的路径,请先使用cd命令进入该目录,然后使用pwd命令查看完整路径。
3. 使用ls命令:ls命令可以列出当前目录中的所有文件和子目录。
如果您想导出子目录的路径,请在终端中输入ls,然后按Enter 键。
接下来,输入cd子目录名称并按Enter键。
最后,使用pwd命令查看完整路径。
4. 使用find命令:find命令可以在整个文件系统中搜索文件和目录。
如果您知道文件或目录的名称,可以使用find命令导出它的路径。
在终端中输入find / -name 文件/目录名称,并按Enter 键。
系统将搜索整个文件系统并显示文件或目录的完整路径。
导出路径是Linux中非常重要的技能,这些方法可以帮助您更快地找到文件或目录,提高工作效率。
- 1 -。
linux查询目录下包含关键字的所有文件
![linux查询目录下包含关键字的所有文件](https://img.taocdn.com/s3/m/fb2cb0374a35eefdc8d376eeaeaad1f34793115e.png)
linux查询⽬录下包含关键字的所有⽂件查找⽬录下的所有⽂件中是否含有某个字符串find .|xargs grep -ri "IBM"查找⽬录下的所有⽂件中是否含有某个字符串,并且只打印出⽂件名find .|xargs grep -ri "IBM" -l1.正则表达式(1)正则表达式⼀般⽤来描述⽂本模式的特殊⽤法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/、*、?等)组成。
(2)基本元字符集及其含义^ :只匹配⾏⾸。
如^a 匹配以a开头的⾏abc,a2e,a12,aaa,......$ :只匹配⾏尾。
如^a 匹配以a结尾的⾏bca,12a,aaa,.......* :匹配0个或多个此单字符。
如(a)* 匹配空,a,aa,aaa,....[] :只匹配[]内字符。
可以是⼀个单字符,也可以是字符序列,⽤","将⾥⾯要匹配的不同字符串分开。
也可以使⽤-来表⽰[]内字符序列的范围,如[1-5]表⽰[12345]\ :只⽤来屏蔽⼀个元字符的特殊含义。
如\*,\',\",\|,\+,\^,\. 等.:(点)只匹配任意单字符。
pattern\{n\}:只⽤来匹配前⾯pattern出现的次数.n为次数。
如a\{2\}匹配aa.pattern\{n,\}:含义同上,但次数最少为n.如a\{2,\}匹配aa,aaa,aaaa,.....pattern\{n,m\}:含义同上,但次数在n和m之间。
如a\{2,4\}匹配aa,aaa,aaaa三个(3)举例说明:^$ :匹配空⾏^.$ :匹配包含⼀个字符的⾏\*\.pas :匹配以*.pas结尾的所有字符或⽂件[0123456789]或[0-9] :假定要匹配任意⼀个数字[a-z] :任意⼩写字母[A-Za-z] :任意⼤⼩写字母[S,s] :匹配⼤⼩写S[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} :匹配IP地址 [0-9]\{3\}三个0-9组成的字符串;\. :匹配点(注意这⾥点是特殊的字符,所以要⽤"\"来屏蔽其含义)2.find介绍(1)查找具有某些特征⽂件的命令,可遍历当前⽬录甚⾄于整个⽂件系统来查看某些⽂件或⽬录,其遍历⼤的⽂件系统时⼀般放在后台执⾏。
linux 遍历指令
![linux 遍历指令](https://img.taocdn.com/s3/m/3af33e07842458fb770bf78a6529647d27283421.png)
linux 遍历指令
在Linux系统中,遍历指令是非常常用的,可以帮助用户查找、列出和处理文件和目录。
以下是一些常见的Linux遍历指令:
1. ls命令,ls命令用于列出指定目录中的文件和子目录。
例如,可以使用ls命令来列出当前目录中的所有文件和目录,ls。
还
可以使用ls -l命令以详细列表的形式显示文件和目录的信息,ls
-l。
2. find命令,find命令用于在指定目录及其子目录中查找符
合条件的文件。
例如,可以使用find命令来查找所有以.txt结尾
的文件,find /path/to/directory -name ".txt"。
3. locate命令,locate命令用于在数据库中查找文件。
它比find命令快速,但是需要定期更新数据库。
例如,可以使用locate
命令来查找所有以.txt结尾的文件,locate .txt。
4. tree命令,tree命令用于以树状图形式显示目录结构。
例如,可以使用tree命令来显示当前目录的树状结构,tree。
5. du命令,du命令用于显示文件和目录的磁盘使用情况。
例如,可以使用du命令来显示当前目录中所有文件和子目录的磁盘使用情况,du。
以上是一些常见的Linux遍历指令,它们可以帮助用户在系统中查找、列出和处理文件和目录。
通过灵活运用这些指令,用户可以更高效地管理和操作文件系统。
Python中如何遍历一个目录输出所有的文件名
![Python中如何遍历一个目录输出所有的文件名](https://img.taocdn.com/s3/m/80aa442eb80d6c85ec3a87c24028915f804d848b.png)
Python中如何遍历一个目录输出所有的文件名Python中如何遍历一个目录输出所有的文件名如今想要学习Python的小伙伴越来越多,不论是参加Python培训还是自学Python开发的小伙伴都有。
本篇文章给喜欢Python开发的小伙伴分享一下Python中如何遍历一个目录输出所有的文件名,希望能帮到对Python开发感兴趣的小伙伴们。
python 获取一个文件夹内(包括子文件夹)所有文件的名字和路径import osdir = "e:\\"for root, dirs, files in os.walk(dir):for file in files:print os.path.join(root,file)或:import ospath = r'e:\case'fns = [os.path.join(root,fn) for root, dirs, files in os.walk(path) for fn in files]for f in fns:print(f)print(len(fns))#coding=utf-8import osdef GetFileList(dir, fileList):newDir = dirif os.path.isfile(dir):fileList.append(dir.decode('gbk'))elif os.path.isdir(dir):for s in os.listdir(dir):#如果需要忽略某些文件夹,使用以下代码#if s == "xxx":#continuenewDir=os.path.join(dir,s)GetFileList(newDir, fileList)return fileListlist = GetFileList('D:\\workspace\\PyDemo\\fas', [])for e in list:print e好了,关于Python中如何遍历一个目录及输出所有的文件名就先给大家分享这些,想要学习Python的小伙伴快到扣丁学堂Python在线学习报名学习吧。
linux系统find用法
![linux系统find用法](https://img.taocdn.com/s3/m/b09df79bcf2f0066f5335a8102d276a2002960b2.png)
linux系统find用法Linux系统中的find命令是一个非常强大和常用的工具,它可以帮助用户在文件系统中查找文件和目录。
find命令支持各种不同的选项和参数,可以根据文件名、文件类型、文件大小、文件权限等条件来进行查找。
一、基本用法1. 查找文件:最简单的用法是通过文件名来查找文件。
使用find命令的基本语法是:find 路径-name 文件名。
例如,要在当前目录及其子目录中查找名为"test.txt"的文件,可以使用以下命令:find . -name test.txt这条命令将在当前目录及其子目录中查找名为"test.txt"的文件,并显示出所有符合条件的文件的路径。
2. 查找目录:和查找文件类似,也可以使用find命令来查找目录。
使用find命令查找目录的基本语法是:find 路径-type d -name 目录名。
例如,要在当前目录及其子目录中查找名为"test"的目录,可以使用以下命令:find . -type d -name test这条命令将在当前目录及其子目录中查找名为"test"的目录,并显示出所有符合条件的目录的路径。
3. 查找指定类型的文件:find命令支持通过文件类型来查找文件。
使用find命令查找指定类型的文件的基本语法是:find 路径-type 文件类型。
例如,要在当前目录及其子目录中查找所有的文本文件,可以使用以下命令:find . -type f -name "*.txt"这条命令将在当前目录及其子目录中查找所有的文本文件,并显示出所有符合条件的文件的路径。
4. 递归查找:默认情况下,find命令会递归查找指定路径下的所有子目录。
如果不希望递归查找,可以加上-maxdepth参数来限制查找的深度。
例如,要在当前目录中查找名为"test.txt"的文件,但不查找子目录,可以使用以下命令:find . -maxdepth 1 -name test.txt这条命令将在当前目录中查找名为"test.txt"的文件,但不会查找子目录。
Linux命令行中的文件搜索和筛选技巧
![Linux命令行中的文件搜索和筛选技巧](https://img.taocdn.com/s3/m/dda8636abdd126fff705cc1755270722192e593e.png)
Linux命令行中的文件搜索和筛选技巧Linux操作系统以其高度定制性和强大的命令行功能而闻名,文件搜索和筛选是在Linux命令行中常见的任务之一。
无论您是初学者还是有经验的用户,掌握一些文件搜索和筛选的技巧都可以提高您的工作效率。
本文将介绍一些常用的Linux命令行中的文件搜索和筛选技巧,帮助您更好地利用Linux操作系统。
一、使用find命令进行文件搜索在Linux命令行中,find命令是用于搜索文件和目录的强大工具。
它可以按照指定的条件在文件系统中递归搜索文件,并将搜索结果返回给用户。
下面是一些find命令的常见用法:1. 搜索指定名称的文件:find /目录路径 -name "文件名"例如,要在整个文件系统中搜索名为"test.txt"的文件,可以运行以下命令:find / -name "test.txt"2. 按文件类型搜索:find /目录路径 -type 类型例如,要在当前目录中搜索所有的目录,可以运行以下命令:find . -type d3. 按文件大小搜索:find /目录路径 -size [+/-]大小例如,要在当前目录中搜索大于10M的文件,可以运行以下命令: find . -size +10M二、使用grep命令进行文件内容筛选除了按照文件名搜索文件,有时候我们需要根据文件内容来筛选文件。
在Linux中,grep命令是用于在文件中搜索指定的字符串模式的工具。
下面是一些grep命令的常见用法:1. 在文件中搜索指定字符串:grep "字符串" 文件名例如,要在文件"test.txt"中搜索"hello"字符串,可以运行以下命令: grep "hello" test.txt2. 对搜索结果进行行数统计:grep -c "字符串" 文件名例如,要统计文件"test.txt"中包含"hello"字符串的行数,可以运行以下命令:grep -c "hello" test.txt3. 忽略大小写进行搜索:grep -i "字符串" 文件名例如,要在文件"test.txt"中搜索"hello"字符串,忽略大小写,可以运行以下命令:grep -i "hello" test.txt三、使用ls命令进行文件列表筛选除了使用find和grep命令进行文件搜索和筛选,ls命令也可以根据指定的条件列出文件列表。
linux中tree的源码
![linux中tree的源码](https://img.taocdn.com/s3/m/6d72a153974bcf84b9d528ea81c758f5f61f29db.png)
linux中tree的源码全文共四篇示例,供读者参考第一篇示例:在Linux操作系统中,tree命令是一款非常实用的工具,它可以帮助用户以树状图的形式展示文件夹及文件的结构,让用户更直观地了解目录的层次关系。
不过,你是否想过tree命令的背后是如何实现的呢?其实,tree命令的源码是开源的,我们可以通过阅读其源码来深入了解其实现原理。
tree命令的源码主要由C语言编写,其核心功能在tree.c文件中实现。
在阅读源码之前,我们需要了解tree命令的基本功能:1. 遍历指定目录下的所有文件夹及文件;2. 以树状图的形式展示目录结构;3. 支持控制输出格式,如显示文件大小、文件权限等信息;4. 支持过滤指定文件或文件夹;5. 支持递归展示子目录。
接下来,让我们深入分析tree命令的源码实现:1. 主函数:tree命令的主函数主要负责解析命令行参数,并调用相应的函数实现功能。
在主函数中,通过解析命令行参数获取用户的选项,如-a(显示所有文件)、-h(以人类可读的形式显示文件大小)等。
2. 遍历目录:tree命令的核心功能是遍历目录树并以树状图的形式展示。
在tree.c文件中,定义了一个名为print_tree的函数,该函数通过递归方式遍历目录,并输出目录结构。
在遍历目录时,需要注意排除当前目录和父目录(.和..)以及过滤用户指定的文件或文件夹。
3. 输出格式:tree命令支持多种输出格式,如显示文件大小、文件权限等信息。
在tree.c文件中,定义了多个辅助函数用于输出文件信息,如print_size函数用于输出文件大小,print_mode函数用于输出文件权限等。
4. 递归展示:当tree命令遍历目录时,如果遇到子目录,需要递归展示子目录下的文件及目录。
在print_tree函数中,通过调用自身实现递归展示目录。
递归展示子目录是tree命令实现树状展示的关键之一。
第二篇示例:在Linux系统中,tree命令是一个非常常用的工具,它可以以树状结构显示指定目录下的所有文件和子目录。
c 遍历文件夹下所有文件的多种方法
![c 遍历文件夹下所有文件的多种方法](https://img.taocdn.com/s3/m/57f28c6ccec789eb172ded630b1c59eef9c79a68.png)
c 遍历文件夹下所有文件的多种方法在C语言中,遍历文件夹下所有文件有多种方法,以下是其中几种常见的方法:1. 使用操作系统提供的API大多数操作系统都提供了遍历文件夹的API,例如Windows平台的FindFirstFile和FindNextFile函数,Linux平台的opendir和readdir函数等。
这些API可以遍历文件夹下的所有文件和子文件夹,并返回文件的信息。
以下是一个使用Linux平台opendir和readdir函数的示例代码:```cinclude <>include <>int main() {DIR dir;struct dirent ent;char path[1035];// 打开当前目录dir = opendir(".");if (dir != NULL) {// 遍历目录下的所有文件和子文件夹 while ((ent = readdir(dir)) != NULL) { printf("%s\n", ent->d_name);}closedir(dir);} else {// 打开目录失败perror("");return 1;}return 0;}```2. 使用第三方库除了操作系统提供的API外,还有一些第三方库可以方便地遍历文件夹下的所有文件,例如GLib库中的g_directory_list_all函数。
这些库通常提供了更高级的遍历功能,例如支持递归遍历子文件夹、过滤特定类型的文件等。
3. 使用命令行工具的输出除了编程方式外,还可以使用命令行工具来遍历文件夹下的所有文件,例如Windows平台的dir命令和Linux平台的ls命令。
这些命令可以输出文件夹下的所有文件和子文件夹,并将结果输出到标准输出流中。
可以将命令的输出通过管道传递给C程序的标准输入流中,然后使用C语言的输入输出函数来解析输出结果。
Linux文件查找命令详解
![Linux文件查找命令详解](https://img.taocdn.com/s3/m/caa0ec846aec0975f46527d3240c844769eaa0a5.png)
Linux⽂件查找命令详解find命令 Linux find命令⽤来在指定⽬录下查找⽂件。
任何位于参数之前的字符串都将被视为欲查找的⽬录名。
如果使⽤该命令时,不设置任何参数,则find命令将在当前⽬录下查找⼦⽬录与⽂件。
并且将查找到的⼦⽬录和⽂件全部进⾏显⽰。
语法参数说明 :find 根据下列规则判断 path 和 expression,在命令列上第⼀个 - ( ) , ! 之前的部份为 path,之后的是 expression。
如果 path 是空字串则使⽤⽬前路径,如果 expression 是空字串则使⽤ -print 为预设 expression。
expression 中可使⽤的选项有⼆三⼗个之多,在此只介绍最常⽤的部份。
选项说明-mount, -xdev只检查和指定⽬录在同⼀个⽂件系统下的⽂件,避免列出其它⽂件系统中的⽂件-amin n在过去 n 分钟内被读取过-anewer file⽐⽂件 file 更晚被读取过的⽂件-atime n在过去 n 天过读取过的⽂件-cmin n在过去 n 分钟内被修改过-cnewer file⽐⽂件 file 更新的⽂件-ctime n在过去 n 天过修改过的⽂件-empty空的⽂件-gid<群组识别码>:查找符合指定之群组识别码的⽂件或⽬录;-group<群组名称>:查找符合指定之群组名称的⽂件或⽬录;-ipath p, -path p路径名称符合 p 的⽂件,ipath 会忽略⼤⼩写-name name, -iname name⽂件名称符合 name 的⽂件。
iname 会忽略⼤⼩写-size n⽂件⼤⼩是 n 单位,b 代表 512 位元组的区块,c 表⽰字元数,k 表⽰ kilo bytes,w 是⼆个位元组。
-type<⽂件类型>只寻找符合指定的⽂件类型的⽂件;-type c : ⽂件类型是 c 的⽂件。
d: ⽬录c: 字型装置⽂件b: 区块装置⽂件p: 具名贮列f: ⼀般⽂件l: 符号连结s: socket实例将⽬前⽬录及其⼦⽬录下所有延伸档名是 c的⽂件列出来。
遍历当前文件夹并执行命令的方法(一)
![遍历当前文件夹并执行命令的方法(一)](https://img.taocdn.com/s3/m/1071f05ef4335a8102d276a20029bd64783e62c6.png)
遍历当前文件夹并执行命令的方法(一)遍历当前文件夹并执行命令在日常的软件开发或者系统管理工作中,有时候我们需要遍历当前文件夹,并对文件进行一些批量操作或者执行一些命令。
本文将介绍几种常用的方法,用于实现这一功能。
方法一:使用Shell脚本Shell脚本是一种常用的自动化工具,可以通过编写Shell脚本来实现遍历当前文件夹并执行命令的功能。
以下是一个示例的Shell 脚本:#!/bin/bash# 遍历当前目录for file in $(ls .)doif [ -f $file ]; then# 对文件执行命令,这里以输出文件名为例echo $filefidone通过上述脚本,我们可以遍历当前文件夹中的所有文件,并对每个文件执行指定的命令。
你可以根据实际需求,修改脚本中的命令部分。
方法二:使用Python脚本除了使用Shell脚本,我们还可以使用Python脚本来实现遍历当前文件夹并执行命令的功能。
以下是一个示例的Python脚本:import os# 遍历当前目录for file in ('.'):if (file):# 对文件执行命令,这里以输出文件名为例print(file)通过上述脚本,我们同样可以遍历当前文件夹中的所有文件,并对每个文件执行指定的命令。
使用Python脚本可以更加灵活地处理文件和命令。
方法三:使用命令行工具除了编写脚本,我们还可以使用一些命令行工具来实现遍历当前文件夹并执行命令的功能。
以下是一些常用的命令行工具:•Windows下的for命令:for %i in (*) do (REM 对文件执行命令,这里以输出文件名为例echo %i)•Linux或者Mac下的find命令:find . -type f -exec echo {} \;使用命令行工具可以快速地实现遍历当前文件夹并执行命令的功能,适用于一些简单的操作。
总结本文介绍了几种常用的方法,用于遍历当前文件夹并执行命令。
C++遍历文件夹下所有文件的多种方法
![C++遍历文件夹下所有文件的多种方法](https://img.taocdn.com/s3/m/51a60fa564ce0508763231126edb6f1aff0071a0.png)
C++遍历⽂件夹下所有⽂件的多种⽅法为数不多的好⽤的代码,遍历⽂件夹获取所有⼦⽂件名,"filespec"可⽤通配符“*?”。
注意如果⽤相对路径的话,获取所有⽂件名后应再调⽤SetInitDir将初始⽬录改为当前⽬录,否则中间⽣成的⽂件都会放在之前的“InitDir”内。
C/C++遍历⽂件夹感觉真是很不好⽤,建议还是使⽤C/C++做单任务处理,然后通过脚本语⾔实现遍历⽐较合理。
CBrowseDir.h#include <io.h>#include <stdlib.h>#include <direct.h>#include <iostream>#include <string>#include <vector>using namespace std;class CBrowseDir{protected://存放初始⽬录的绝对路径,以'\'结尾char m_szInitDir[_MAX_PATH];public://缺省构造器CBrowseDir();//设置初始⽬录为dir,如果返回false,表⽰⽬录不可⽤bool SetInitDir(const char *dir);//开始遍历初始⽬录及其⼦⽬录下由filespec指定类型的⽂件//filespec可以使⽤通配符 * ?,不能包含路径。
//如果返回false,表⽰遍历过程被⽤户中⽌bool BeginBrowse(const char *filespec);vector<string> BeginBrowseFilenames(const char *filespec);protected://遍历⽬录dir下由filespec指定的⽂件//对于⼦⽬录,采⽤迭代的⽅法//如果返回false,表⽰中⽌遍历⽂件bool BrowseDir(const char *dir,const char *filespec);vector<string> GetDirFilenames(const char *dir,const char *filespec);//函数BrowseDir每找到⼀个⽂件,就调⽤ProcessFile//并把⽂件名作为参数传递过去//如果返回false,表⽰中⽌遍历⽂件//⽤户可以覆写该函数,加⼊⾃⼰的处理代码virtual bool ProcessFile(const char *filename);//函数BrowseDir每进⼊⼀个⽬录,就调⽤ProcessDir//并把正在处理的⽬录名及上⼀级⽬录名作为参数传递过去//如果正在处理的是初始⽬录,则parentdir=NULL//⽤户可以覆写该函数,加⼊⾃⼰的处理代码//⽐如⽤户可以在这⾥统计⼦⽬录的个数virtual void ProcessDir(const char *currentdir,const char *parentdir);};CBrowseDir.cpp#include "CBrowseDir.h"CBrowseDir::CBrowseDir(){//⽤当前⽬录初始化m_szInitDirgetcwd(m_szInitDir,_MAX_PATH);//如果⽬录的最后⼀个字母不是'\',则在最后加上⼀个'\'int len=strlen(m_szInitDir);if (m_szInitDir[len-1] != '\\')strcat(m_szInitDir,"\\");}bool CBrowseDir::SetInitDir(const char *dir){return false;//判断⽬录是否存在if (_chdir(m_szInitDir) != 0)return false;//如果⽬录的最后⼀个字母不是'\',则在最后加上⼀个'\'int len=strlen(m_szInitDir);if (m_szInitDir[len-1] != '\\')strcat(m_szInitDir,"\\");return true;}vector<string> CBrowseDir::BeginBrowseFilenames(const char *filespec) {ProcessDir(m_szInitDir,NULL);return GetDirFilenames(m_szInitDir,filespec);}bool CBrowseDir::BeginBrowse(const char *filespec){ProcessDir(m_szInitDir,NULL);return BrowseDir(m_szInitDir,filespec);}bool CBrowseDir::BrowseDir(const char *dir,const char *filespec){_chdir(dir);//⾸先查找dir中符合要求的⽂件long hFile;_finddata_t fileinfo;if ((hFile=_findfirst(filespec,&fileinfo)) != -1){do{//检查是不是⽬录//如果不是,则进⾏处理if (!(fileinfo.attrib & _A_SUBDIR)){char filename[_MAX_PATH];strcpy(filename,dir);strcat(filename,);cout << filename << endl;if (!ProcessFile(filename))return false;}} while (_findnext(hFile,&fileinfo) == 0);_findclose(hFile);}//查找dir中的⼦⽬录//因为在处理dir中的⽂件时,派⽣类的ProcessFile有可能改变了//当前⽬录,因此还要重新设置当前⽬录为dir。
CC++遍历目录下的所有文件(Windows篇,超详细)
![CC++遍历目录下的所有文件(Windows篇,超详细)](https://img.taocdn.com/s3/m/c1747a2f4a35eefdc8d376eeaeaad1f3469311e1.png)
CC++遍历⽬录下的所有⽂件(Windows篇,超详细)注:1. 本⽂讨论的是怎么⽤Windows API遍历⽬录下的所有⽂件。
除Windows API,还有⼀种Windows/Linux通⽤的⽅式,使⽤<io.h>。
2. 本⽂部分翻译⾃MSDN,翻译可能不准确。
WIN32_FIND_DATA结构遍历⽬录下的⽂件需要⽤到WIN32_FIND_DATA结构。
实际上有两种结构:WIN32_FIND_DATAA和WIN32_FIND_DATAW。
A和W分别代表ASCII和宽字符(Unicode)。
定义UNICODE宏时,WIN32_FIND_DATA指WIN32_FIND_DATAW;否则指WIN32_FIND_DATAA。
下⾯是两个结构的定义(minwinbase.h,VS2015):typedef struct _WIN32_FIND_DATAA {DWORD dwFileAttributes;FILETIME ftCreationTime;FILETIME ftLastAccessTime;FILETIME ftLastWriteTime;DWORD nFileSizeHigh;DWORD nFileSizeLow;DWORD dwReserved0;DWORD dwReserved1;_Field_z_ CHAR cFileName[ MAX_PATH ];_Field_z_ CHAR cAlternateFileName[ 14 ];#ifdef _MACDWORD dwFileType;DWORD dwCreatorType;WORD wFinderFlags;#endif} WIN32_FIND_DATAA;typedef struct _WIN32_FIND_DATAW {DWORD dwFileAttributes;FILETIME ftCreationTime;FILETIME ftLastAccessTime;FILETIME ftLastWriteTime;DWORD nFileSizeHigh;DWORD nFileSizeLow;DWORD dwReserved0;DWORD dwReserved1;_Field_z_ WCHAR cFileName[ MAX_PATH ];_Field_z_ WCHAR cAlternateFileName[ 14 ];#ifdef _MACDWORD dwFileType;DWORD dwCreatorType;WORD wFinderFlags;#endif} WIN32_FIND_DATAW;关于_MAC宏的部分可以忽略,这是有历史原因的——曾今Microsoft是Mac的最⼤开发者,为了⽅便Windows上的应⽤移植到Mac上,就使⽤_MAC宏,如果是Mac操作系统_MAC就是有定义的。
C#遍历指定文件夹中的所有文件
![C#遍历指定文件夹中的所有文件](https://img.taocdn.com/s3/m/f285dc04cc1755270722087e.png)
C#遍历指定文件夹中的所有文件DirectoryInfo TheFolder=new DirectoryInfo(folderFullName);//遍历文件夹foreach(DirectoryInfo NextFolder in TheFolder.GetDirectories())this.listBox1.Items.Add();//遍历文件foreach(FileInfo NextFile in TheFolder.GetFiles())this.listBox2.Items.Add();================================================== =================如何获取指定目录包含的文件和子目录1. DirectoryInfo.GetFiles():获取目录中(不包含子目录)的文件,返回类型为FileInfo[],支持通配符查找;2. DirectoryInfo.GetDirectories():获取目录(不包含子目录)的子目录,返回类型为DirectoryInfo[],支持通配符查找;3. DirectoryInfo. GetFileSystemInfos():获取指定目录下(不包含子目录)的文件和子目录,返回类型为FileSystemInfo[],支持通配符查找;如何获取指定文件的基本信息;FileInfo.Exists:获取指定文件是否存在;,FileInfo.Extensioin:获取文件的名称和扩展名;FileInfo.FullName:获取文件的全限定名称(完整路径);FileInfo.Directory:获取文件所在目录,返回类型为DirectoryInfo;FileInfo.DirectoryName:获取文件所在目录的路径(完整路径);FileInfo.Length:获取文件的大小(字节数);FileInfo.IsReadOnly:获取文件是否只读;FileInfo.Attributes:获取或设置指定文件的属性,返回类型为FileAttributes枚举,可以是多个值的组合FileInfo.CreationTime、stAccessTime、stWriteTime:分别用于获取文件的创建时间、访问时间、修改时间;详情可参考/view/1752295abe23482fb4da4c8e.html/shouxin1014/blog/item/ab9ee9d2a68de2103bf3cf73.html。
对于Linux chmod、chown、chgrp命令的阐述
![对于Linux chmod、chown、chgrp命令的阐述](https://img.taocdn.com/s3/m/f75f9dc34028915f804dc263.png)
对于Linux chmod命令的阐述Linux的流行,以至于很多人开始学习Linux。
学习中经常会看到Linux系统很多的命令,你是否了解这些命令,本文讲解Linux chmod命令,希望能给你能应用好Linux chmod命令。
只能文件属主或特权用户才能使用该功能来改变文件存取模式。
mode可以是数字形式或以who opcode permission形式表示。
who是可选的,默认是a(所有用户)。
只能选择一个opcode(操作码)。
可指定多个mode,以逗号分开。
options:-c,--changes 只输出被改变文件的信息-f,--silent,--quiet 当chmod不能改变文件模式时,不通知文件的用户--help 输出帮助信息。
-R,--recursive 可递归遍历子目录,把修改应到目录下所有文件和子目录--reference=filename 参照filename的权限来设置权限-v,--verbose 无论修改是否成功,输出每个文件的信息--version 输出版本信息。
whou 用户g 组o 其它a 所有用户(默认)opcode+ 增加权限- 删除权限= 重新分配权限permissionr 读w 写x 执行s 设置用户(或组)的ID号t 设置粘着位(sticky bit),防止文件或目录被非属主删除u 用户的当前权限g 组的当前权限o 其他用户的当前权限作为选择,我们多数用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。
如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。
还可设置第四位,它位于三位权限序列的前面,第四位数字取值是4,2,1,代表意思如下:4,执行时设置用户ID,用于授权给基于文件属主的进程,而不是给创建此进程的用户。
2,执行时设置用户组ID,用于授权给基于文件所在组的进程,而不是基于创建此进程的用户。
Linux_shell脚本_遍历文件夹下所有文件
![Linux_shell脚本_遍历文件夹下所有文件](https://img.taocdn.com/s3/m/23d7fe6624c52cc58bd63186bceb19e8b8f6eceb.png)
Linux_shell脚本_遍历⽂件夹下所有⽂件参考:实现:从给定⽬录树中grep出含制定字符串的⾏,并给出所在路径代码如下所⽰:#!/bin/sh -if [ $# -ne 2 ]then echo "usage traverse <dir> <str>"exitfi{function ergodic(){for file in ` ls $1`doif [ -d $1"/"$file ] #如果 file存在且是⼀个⽬录则为真thenergodic $1"/"$file $2elselocal path=$1"/"$file #得到⽂件的完整的⽬录local name=$file #得到⽂件的名字if [[ `cat $path | grep $2` ]]then echo ""echo LOC:$pathficat –n $path | grep $2fidone}}ergodic $1 $2效果图:还有⼀种⽅法,可以直接调⽤find指令完成查找⽂件,将结果输出⾄grep(参考APUE(3),p190)对于find,我们使⽤选项-type f限制输出列表只包含普通⽂件。
这样做的⽬的是,grep命令不能在⽬录中搜索模式,我们也想避免不必要的出错消息。
find . -type f -print | xargs grep STUps:如果要想在压缩⽂件内寻找⽂本⽚段,可以使⽤:find . -type f -print | xargs bzgrep STUdone。
Linux系统字符串查找命令详细说明
![Linux系统字符串查找命令详细说明](https://img.taocdn.com/s3/m/3300a9c9b8f3f90f76c66137ee06eff9aef8494d.png)
Linux系统字符串查找命令详细说明Linux系统中有时候需要特定的查找字符串的功能。
下面由店铺为大家整理了Linux系统字符串查找命令详细说明,希望对大家有帮助!Linux系统字符串查找命令详细说明1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2.格式grep [options]3.主要参数[options]主要参数:-c:只输出匹配行的计数。
-I:不区分大小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:\:忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求。
:所有的单个字符。
* :有字符,长度可以为0。
Linux系统查找字符串命令实例假设您正在’/usr/src/linux/Doc’目录下搜索带字符串’magic’的文件:$ grep magic /usr/src/Linux/Doc/*sysrq.txt:* How do I enable the magic SysRQ key?sysrq.txt:* How do I use the magic SysRQ key?其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
默认情况下,’grep’只搜索当前目录。
如果此目录下有许多子目录,’grep’会以如下形式列出:grep: sound: Is a directory这可能会使’grep’ 的输出难于阅读。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
printf("reclen=%d type=%d\t", ent->d_reclen, ent->d_type);
if (ent->d_reclen==24)
{
//d_type:4表示为目录,8表示为文件
if (ent->d_type==8)
{
printf("error opendir %s!!!\n",path);
return -1;
}
while((file = readdir(d)) != NULL)
{
//把当前目录.,上一级目录..及隐藏文件都去掉,避免死循环遍历目录
if(strncmp(file->d_name, ".", 1) == 0)
char d_name[256]; /* filename */
};
这个结构体的d_name存放的就是文件的名字,这里的文件包括普通文件,目录文件等等,在linux的思想中,所有的东西都是文件。
closedir函数的原型为:
int closedir(DIR *dir);
这个函数就不用多说了,一般有开(open),就有关(close),这样的结构经常可出看到,如fopen,fclose等等。
经过本人亲自试验发现:d_reclen:16表示子目录或以.开头的隐藏文件,24表示普通文本文件,28为二进制文件,等等
d_name:目录或文件的名称
具体代码如下,仅供参考
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
void List(char *path)
{
trave_dir(file->d_name, depth + 1);
}
}
closedir(d);
return 0;
}
int main()
{
int depth = 1;
int i;
trave_dir("/usr/keygoe/ini/", depth);
for(i = 0; i < len; i++)
Linux C:遍历输出指定目录下的所有文件
在Linux下opendir()、readdir()和closedir()这三个函数主要用来遍历目录。在使用这三个函数前必须先包括以下两个头文件:
#include <sys/types.h>
#include <dirent.h>
opendir函数的原型为:
三个函数介绍完了,直接来一个例子吧:
SearchDir.c#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
char filename[256][256];
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 */
{
struct dirent* ent = NULL;
DIR *pDir;
pDir=opendir(path);
while (NULL != (ent=readdir(pDir)))
{
if (ent->d_reclen==24)
{
if (ent->d_type==8)
{
printf("普通文件:%s\n", ent->d_name);
void List(char *path)
{
printf("路径为[%s]\n", path);
struct dirent* ent = NULL;
DIR *pDir;
pDir=opendir(path);
//d_reclen:16表示子目录或以.开头的隐藏文件,24表示普通文本文件,28为二进制文件,还有其他……
continue;
strcpy(filename[len++], file->d_name); //保存遍历到的文件名
//判断该文件是否是目录,及是否已搜索了三层,这里我定义只搜索了三层目录,太深就不搜了,省得搜出太多文件
if(stat(file->d_name, &sb) >= 0 && S_ISDIR(sb.st_mode) && depth <= 3)
}
else
{
printf("子目录:%s\n",ent->d_name);
List(ent->d_name);
printf("返回%s\n",ent->d_name);
}
}
}
}
int main(int argc, char *argv[])
{
List(argv[1]);t len = 0;
int trave_dir(char* path, int depth)
{
DIR *d; //声明一个句柄
struct dirent *file; //readdir函数的返回值就存放在这个结构体中
struct stat sb;
if(!(d = opendir(path)))
{
printf("普通文件[%s]\n", ent->d_name);
{
printf("%s\t", filename[i]);
}
printf("\n");
return 0;
}
Linux下C语言遍历文件夹
学习了LINUX下用C语言遍历文件夹,一些心得
struct dirent中的几个成员:
d_type:4表示为目录,8表示为文件
d_reclen:16表示子目录或文件,24表示非子目录
DIR *opendir(const char *name);
它返回一个DIR*类型,这就是一个句柄啦,你不用管它的内部结构是什么样的,只要知道这个句柄就是等一下要传给readdir()函数的参数就行了。
readdir函数的原型为:
struct dirent *readdir(DIR *dir);
看它的参数就知道该参数是opendir函数返回的句柄,而该函数的返回值是struct dirent*类型,这里我们必须了解一下这个结构体: