LINUX下C语言获取目录中的文件列表

关系的
如果想判断是否为文件夹或者文件,则可以使用如下代码:
struct stat info; 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 */ ino_t st_ino; /* inode number */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of hard links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device ID (if special file) */ off_t st_size; /* total size, in bytes */ blksize_t st_blksize; /* blocksize for filesystem I/O */
相关函数
open,opendir,closedir,rewinddir,seekdir,telldir,scandir
表头文件
#include<sys/types.h> #include<dirent.h>
定义函数
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 文件名
错误代码
EACCESS 权限不足 EMFILE 已达到进程可同时打开的文件数上限。 ENFILE 已达到系统可同时打开的文件数上限。
ENOTDIR 参数 name 非真正的目录 ENOENT 参数 name 指定的目录不存在,或是参数 name 为一空字符串。 ENOMEM 核心内存不足。
readdir(读取目录)
注释:代码中的 opendir 函数和 readdir 函数如下所示:
opendir(打开目录) 相关函数
open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件
#include<sys/types.h> #include<dirent.h>
Linux 下 C 语言获取目录中的文件列表 分类:编程语言 代码如下:Liபைடு நூலகம்ux 下使用 GCC 编译即可
#include <sys/types.h> #include <dirent.h> #include <unistd.h> #include <stdio.h>
int main(){ DIR *dir; struct dirent
定义函数
DIR * opendir(const char * name);
函数说明
opendir()用来打开参数 name 指定的目录,并返回 DIR*形态的目录流,和 open()类似,接下 来对目录的读取和搜索都要使用此返回值。
返回值
成功则返回 DIR* 型态的目录流,打开失败则返回 NULL。
返回值
成功则返回下个目录进入点。有错误发生或读取到目录文件尾则返回 NULL。
附加说明
EBADF 参数 dir 为无效的目录流
*ptr;
dir = opendir("/home/zhangyang/kmeans");
while((ptr = readdir(dir)) != NULL) printf("d_name: %s\n", ptr->d_name);
closedir(dir); return 0; }
注意:假设要读取的目录中有多个文件,文件名分别为:1.bin, 2.bin, 3.bin,.....99.bin 等 程序的读取顺序是这样的:1.bin, 10.bin, 11.bin,....19.bin, 2.bin, 20.bin,...,29.bin,....99.bin 而不是我们所期望的 1.bin, 2.bin, 3.bin,.....99.bin,可见文件的读取顺序是与文件名有
blkcnt_t st_blocks; /* number of blocks allocated */ 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 域的文件类型: S_ISREG() regular file? S_ISDIR() directory? S_ISCHR() character device? S_ISBLK() block device? S_ISFIFO() FIFO (named pipe)? S_ISLNK() symbolic link? S_ISSOCK() socket?
合集下载

linux系统编程-显示指定目录下文件列表实验报告

linux系统编程-显示指定目录下文件列表实验报告

计算机科学与技术系实验(项目)报告一、基本信息二、目的与要求目的:通过实验掌握linux环境下目录文件管理的基本方法。

要求:1.掌握Linux目录基本操作;2.掌握Linux环境下目录切换、创建、删除和目录指针定位的基本操作;三、完成实验(项目)过程和效果内容:1.项目分析与设计;2.项目实施;3.项目编译与运行。

步骤:1.项目分析与设计1)项目基本功能:类似ls 目录或ls -l目录及ls -l,如“ls 目录”、“ls -l”。

2)程序结构设计本项目主要应用目录打开、读取、关闭函数完成,其中在读取目录时由于readdir函数一次只能读取一个文件信息,必须使用循环知道读完整个目录。

3)程序基本流程2.项目实施d1=opendir(name);if(d1==NULL){perror("opendir");exit(1);}getcwd(workdir,50);chdir(name);errno=0;dent1=readdir(d1);while( dent1!=NULL){if(dent1->d_name[0]!='.'){if(flag==0)printf("%s\t",dent1->d_name);elseprintlong(dent1->d_name);}dent1=readdir(d1);}if(errno!=0)perror("readdir");if(flag==0)printf("\n");closedir(d1);chdir(workdir);。

3.项目的实施与运行四、知识应用以及经验总结实现一个程序必须要经过反复的调试,写程序必须要保持着清醒的头脑,不然逻辑不清楚将会影响接踵而至的错误。

一个项目,归根结底,得依赖着实现它功能的函数,这些函数需要哪些头文件,这些函数之间又需要哪些联系,将需要我们通过程序将他们联系在一起实现功能。

Linux下C语言获取目录中的文件列表

Linux下C语言获取目录中的文件列表
struct stat info;
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域的Байду номын сангаас件类型:

【C#】C#获取文件夹下的所有文件

【C#】C#获取文件夹下的所有文件

【C#】C#获取⽂件夹下的所有⽂件 #基础知识 1、获得当前运⾏程序的路径1string rootPath = Directory.GetCurrentDirectory(); 2、获得该⽂件夹下的⽂件,返回类型为FileInfo1string path=@"X:\XXX\XX";2 DirectoryInfo root = new DirectoryInfo(path);3 FileInfo[] files=root.GetFiles(); 3、获得该⽂件夹下的⼦⽬录,返回类型为DirectoryInfo1string path=@"X:\XXX\XX";2 DirectoryInfo root = new DirectoryInfo(path);3 DirctoryInfo[] dics=root.GetDirectories(); 4、获得⽂件夹名1string path=@"X:\XXX\XX";2 DirectoryInfo root = new DirectoryInfo(path);3string dicName=; 5、获得⽂件夹完整的路径名1string path=@"X:\XXX\XX";2 DirectoryInfo root = new DirectoryInfo(path);3string dicName=root.FullName; 6、获取⽂件的Name和FullName1string path=@"X:\XXX\XX";2 DirectoryInfo root = new DirectoryInfo(path);3foreach (FileInfo f in root.GetFiles())4 {5string name=;6string fullName=f.FullName;7 }#只获取⽬录下⼀级的⽂件夹与⽂件1 String path = @"X:\xxx\xxx";23//第⼀种⽅法4string[] files = Directory.GetFiles(path, "*.txt");56foreach (string file in files)7 {8 Console.WriteLine(file);9 }1011//第⼆种⽅法12 DirectoryInfo folder = new DirectoryInfo(path);1314foreach (FileInfo file in folder.GetFiles("*.txt"))15 {16 Console.WriteLine(file.FullName);17 }# 递归地输出当前运⾏程序所在的磁盘下的所有⽂件名和⼦⽬录名1static void Main(string[] args)2 {3//获取当前程序所在的⽂件路径4 String rootPath = Directory.GetCurrentDirectory();5string parentPath = Directory.GetParent(rootPath).FullName;//上级⽬录6string topPath = Directory.GetParent(parentPath).FullName;//上上级⽬录7 StreamWriter sw = null;8try9 {10//创建输出流,将得到⽂件名⼦⽬录名保存到txt中11 sw = new StreamWriter(new FileStream("fileList.txt", FileMode.Append));12 sw.WriteLine("根⽬录:" + topPath);13 getDirectory(sw, topPath, 2);14 }15catch (IOException e)16 {17 Console.WriteLine(e.Message);18 }19finally20 {21if (sw != null)22 {23 sw.Close();24 Console.WriteLine("完成");25 }26 }2728 }2930///<summary>31///获得指定路径下所有⽂件名32///</summary>33///<param name="sw">⽂件写⼊流</param>34///<param name="path">⽂件写⼊流</param>35///<param name="indent">输出时的缩进量</param>36public static void getFileName(StreamWriter sw, string path, int indent)37 {38 DirectoryInfo root = new DirectoryInfo(path);39foreach (FileInfo f in root.GetFiles())40 {41for (int i = 0; i < indent; i++)42 {43 sw.Write("");44 }45 sw.WriteLine();46 }47 }4849///<summary>50///获得指定路径下所有⼦⽬录名51///</summary>52///<param name="sw">⽂件写⼊流</param>53///<param name="path">⽂件夹路径</param>54///<param name="indent">输出时的缩进量</param>55public static void getDirectory(StreamWriter sw, string path, int indent)56 {57 getFileName(sw, path, indent);58 DirectoryInfo root = new DirectoryInfo(path);59foreach (DirectoryInfo d in root.GetDirectories())60 {61for (int i = 0; i < indent; i++)62 {63 sw.Write("");64 }65 sw.WriteLine("⽂件夹:" + );66 getDirectory(sw, d.FullName, indent + 2);67 sw.WriteLine();68 }69 }------------------------------------------------------。

CC++如何获取目录下的文件列表信息

CC++如何获取目录下的文件列表信息

CC++如何获取目录下的文件列表信息C/C++如何获取目录下的文件列表信息C/C++如何获取目录下的文件列表信息?下面下面就一起来了解看看具体的方法吧!1.数据结构复制代码代码如下:struct dirent{long d_ino; /* inode number 索引节点号 */off_t d_off; /* offset to this dirent 在目录文件中的偏移 */unsigned short d_reclen; /* length of this d_name 文件名长 */ unsigned char d_type; /* the type of d_name 文件类型 */char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */}struct __dirstream{void *__fd; /* `struct hurd_fd' pointer for descriptor. */char *__data; /* Directory block. */int __entry_data; /* Entry number `__data' corresponds to. */ char *__ptr; /* Current pointer into the block. */int __entry_ptr; /* Entry number `__ptr' corresponds to. */size_t __allocation; /* Space allocated for the block. */size_t __size; /* Total valid data in the block. */__libc_lock_define (, __lock) /* Mutex lock for this structure. */ };typedef struct __dirstream DIR;2.程序示例其中程序中win不支持文件类型(d_type),可以根据文件名称后缀来判断文件类型;linux可以直接使用d_type判断是目录还是文件。

如何在Linux终端中查看目录内容

如何在Linux终端中查看目录内容

如何在Linux终端中查看目录内容在Linux终端中查看目录内容是进行系统管理和文件操作的一项基本技能。

无论是初学者还是有经验的Linux用户,了解如何正确地查看目录内容都非常重要。

在Linux中,有多种方法可以查看目录内容。

下面将介绍几种常用的方法。

1. 使用ls命令ls命令是最常用的查看目录内容的方法之一。

它的基本用法是:```ls [选项] [目录名]```如果没有指定目录名,则默认为当前目录。

ls命令的常用选项包括:- -l:以长格式显示文件信息,包括文件权限、所有者、文件大小等。

- -a:显示所有文件,包括隐藏文件。

- -h:以人类可读的方式显示文件大小。

例如,要以长格式显示当前目录的内容,可以使用命令:```ls -l```要显示所有文件(包括隐藏文件)的信息,可以使用命令:```ls -a```2. 使用tree命令tree命令可以以树状图形式显示目录结构。

它的基本用法是:```tree [选项] [目录名]```tree命令的常用选项包括:- -L n:限制显示目录深度为n级。

- -a:显示所有文件和目录,包括隐藏文件。

- -f:在每个文件和目录前面显示完整的路径。

例如,要显示当前目录的目录结构,可以使用命令:```tree```要显示所有文件和目录(包括隐藏文件),并且在每个文件和目录前面显示完整路径,可以使用命令:```tree -af```3. 使用find命令find命令可以用于查找文件和目录,并可以根据不同的条件进行过滤。

它的基本用法是:```find [路径] [选项] [操作]```如果没有指定路径,则默认为当前目录。

find命令的常用选项和操作非常多,在这里只介绍一些常用的。

- -name pattern:按照文件名模式匹配查找文件或目录。

- -type type:按照文件类型查找,如f表示文件,d表示目录。

- -size n:按照文件大小查找,单位为k(千字节)。

归纳整理Linux下C语言常用的库函数----文件操作

归纳整理Linux下C语言常用的库函数----文件操作

归纳整理Linux下C语⾔常⽤的库函数----⽂件操作在没有IDE的时候,记住⼀些常⽤的库函数的函数名、参数、基本⽤法及注意事项是很有必要的。

参照Linux_C_HS.chm的⽬录,我⼤致将常⽤的函数分为⼀下⼏类:1. 内存及字符串控制及操作2. 字符串转换3. 字符测试4. ⽂件操作5. 时间⽇期6. 常⽤数学函数7. ⽂件内容操作8. ⽂件权限控制9. 进程操作10. 线程操作11. Socket操作12. 信号处理13. 数据结构及算法这次主要总结的是上⾯⿊⾊部分,关于⽂件操作的函数。

系统调⽤归类** 函数名⽤法备注**1. int open(const char *pathname, int flags); open and possibly create a file or device flags 必须包含O_RDONLY, O_WRONLY, or O_RDWR中的任何⼀个**2. int open(const char *pathname, int flags, mode_t mode); UP mode只是在flags中包含O_CREAT时才有效**3. int fsync(int fd); synchronize a file's in-core state with storage device 写完数据close前必须先同步,以防意外**4. off_t lseek(int fd, off_t offset, int whence); 定位⽂件位置第三个参数可以为SEEK_SET SEEK_CUR SEEK_END**5. ssize_t read(int fildes, void *buf, size_t nbyte); UP ⽂件位置会随读取的字节数移动**6. ssize_t write(int fildes, const void *buf, size_t nbyte); UP UP**7. int close(int fd); UP UP**8. void *mmap(void *addr, size_t length, int prot, int flags, 内存映射先⽤fstat得到⽂件⼤⼩,然后使⽤该函数将⽂件内容映射到内存中,然后就可以int fd, off_t offset); 直接调⽤字符串函数操作。

c dir函数

c dir函数C语言中的dir函数在C语言中,dir函数是一个非常常用的函数,用于获取指定目录下的文件列表。

它的功能类似于Windows操作系统中的dir命令或者Linux操作系统中的ls命令。

通过调用dir函数,我们可以获取指定目录下的所有文件名,并将这些文件名以某种格式输出。

使用dir函数的第一步是包含相关的头文件。

在C语言中,我们可以使用<dirent.h>头文件来引用dir函数的相关定义和声明。

在使用dir函数之前,我们需要定义一个DIR类型的变量,用于保存打开的目录流。

DIR类型是一个抽象的指针类型,我们可以将其视为一个目录的句柄。

我们可以通过调用opendir函数,打开一个目录,并将返回的DIR类型的指针赋值给我们定义的变量。

接下来,我们可以使用readdir函数来读取目录下的文件列表。

readdir函数的参数是先前由opendir函数返回的DIR类型的指针。

每次调用readdir函数,它会返回目录下的一个文件名,并将指针移动到下一个文件。

我们可以通过循环调用readdir函数,来遍历目录下的所有文件名。

在调用readdir函数之后,我们需要判断返回的文件名是否为空。

如果为空,说明目录已经遍历结束,我们可以调用closedir函数来关闭目录流,并释放之前由opendir函数返回的DIR类型的指针。

否则,我们可以将返回的文件名输出到屏幕或者保存到一个数组中。

需要注意的是,readdir函数返回的文件名是一个结构体类型,包含文件名和文件类型等信息。

我们可以通过访问结构体的成员来获取这些信息。

具体的结构体定义可以在<dirent.h>头文件中找到。

除了常规的文件名遍历,dir函数还提供了一些其他功能。

例如,我们可以使用telldir和seekdir函数来保存和恢复目录流的位置信息,以便在遍历过程中进行跳转。

此外,我们还可以使用rewinddir函数将目录流的指针重置到起始位置,以便重新遍历目录。

Linux下查看目录文件数和文件大小

Linux下查看⽬录⽂件数和⽂件⼤⼩⼀、查看当前⽬录下⽂件个数
在linux下查看⽬录下有多少⽂件可以⽤:ls -l 命令查看,ls -lR 递归查看所有⽬录,
如果⽂件很多,则⽤wc命令和 grep 命令进⾏过滤。

wc命令显⽰输出的⾏列字符数,-l表⽰仅列出⾏、-w表⽰仅列出多少字、-m表⽰仅列出多少字符;
grep⽤于过滤输出信息,不做详细介绍;
如下:
1、ls -l获取当前⽬录下信息
2、ls -l | wc -l 列出有多少个⽂件
3、ls -lR | wc -l 递归获取当前⽬录有多少⽂件
4、ls -lR | grep “^d” | wc -l 递归获取当期⽬录有多少⽬录⽂件,其中“^d”表⽰仅列出⽬录⽂件
⼆、查看当前⽬录⽂件⼤⼩
1、ls -lht 查看当前⽬录下⽂件的⼤⼩
2、ls -lhtR 递归查看当前⽬录下所有⽂件的⼤⼩
3、du -sh 查看当前⽂件夹的⼤⼩。

linux查看文件夹大小、文件个数的方法

linux查看⽂件夹⼤⼩、⽂件个数的⽅法linux 下查看⽂件个数及⼤⼩ls -l |grep "^-"|wc -l或find ./company -type f | wc -l查看某⽂件夹下⽂件的个数,包括⼦⽂件夹⾥的。

ls -lR|grep "^-"|wc -l查看某⽂件夹下⽂件夹的个数,包括⼦⽂件夹⾥的。

ls -lR|grep "^d"|wc -l说明:ls -l长列表输出该⽬录下⽂件信息(注意这⾥的⽂件,不同于⼀般的⽂件,可能是⽬录、链接、设备⽂件等)grep "^-"这⾥将长列表输出信息过滤⼀部分,只保留⼀般⽂件,如果只保留⽬录就是 ^dwc -l统计输出信息的⾏数,因为已经过滤得只剩⼀般⽂件了,所以统计结果就是⼀般⽂件信息的⾏数,⼜由于⼀⾏信息对应⼀个⽂件,所以也就是⽂件的个数。

Linux查看⽂件夹⼤⼩du -sh 查看当前⽂件夹⼤⼩du -sh * | sort -n 统计当前⽂件夹(⽬录)⼤⼩,并按⽂件⼤⼩排序du -sk filename 查看指定⽂件⼤⼩当磁盘⼤⼩超过标准时会有报警提⽰,这时如果掌握df和du命令是⾮常明智的选择。

df可以查看⼀级⽂件夹⼤⼩、使⽤⽐例、档案系统及其挂⼊点,但对⽂件却⽆能为⼒。

du可以查看⽂件及⽂件夹的⼤⼩。

两者配合使⽤,⾮常有效。

⽐如⽤df查看哪个⼀级⽬录过⼤,然后⽤df查看⽂件夹或⽂件的⼤⼩,如此便可迅速确定症结。

下⾯分别简要介绍df命令可以显⽰⽬前所有⽂件系统的可⽤空间及使⽤情形,请看下列这个例⼦:以下是代码⽚段:[yayug@yayu ~]$ df -hFilesystem Size Used Avail Use% Mounted on/dev/sda1 3.9G 300M 3.4G 8% //dev/sda7 100G 188M 95G 1% /data0/dev/sdb1 133G 80G 47G 64% /data1/dev/sda6 7.8G 218M 7.2G 3% /var/dev/sda5 7.8G 166M 7.2G 3% /tmp/dev/sda3 9.7G 2.5G 6.8G 27% /usrtmpfs 2.0G 0 2.0G 0% /dev/shm参数 -h 表⽰使⽤「Human-readable」的输出,也就是在档案系统⼤⼩使⽤ GB、MB 等易读的格式。

Linux命令行中的文件搜索和筛选技巧

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命令也可以根据指定的条件列出文件列表。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档