Linux C 读取文件夹下所有文件(包括子文件夹)的文件名

本文:http://www.cnblogs.com/xudong-bupt/p/3504442.html

Linux C  下面读取文件夹要用到结构体struct dirent,在头#include <dirent.h>中,如下:

#include <dirent.h>
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字符 */
}

其中d_type表明该文件的类型:文件(8)、目录(4)、链接文件(10)等。

 

下面程序,递归读取某文件夹及其子文件夹下所有文件名:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <dirent.h>
 5 #include <unistd.h>
 6 int readFileList(char *basePath)
 7 {
 8     DIR *dir;
 9     struct dirent *ptr;
10     char base[1000];
11
12     if ((dir=opendir(basePath)) == NULL)
13     {
14         perror("Open dir error...");
15         exit(1);
16     }
17
18     while ((ptr=readdir(dir)) != NULL)
19     {
20         if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0)    ///current dir OR parrent dir
21             continue;
22         else if(ptr->d_type == 8)    ///file
23             printf("d_name:%s/%s\n",basePath,ptr->d_name);
24         else if(ptr->d_type == 10)    ///link file
25             printf("d_name:%s/%s\n",basePath,ptr->d_name);
26         else if(ptr->d_type == 4)    ///dir
27         {
28             memset(base,'\0',sizeof(base));
29             strcpy(base,basePath);
30             strcat(base,"/");
31             strcat(base,ptr->d_name);
32             readFileList(base);
33         }
34     }
35     closedir(dir);
36     return 1;
37 }
38
39 int main(void)
40 {
41     DIR *dir;
42     char basePath[1000];
43
44     ///get the current absoulte path
45     memset(basePath,'\0',sizeof(basePath));
46     getcwd(basePath, 999);
47     printf("the current dir is : %s\n",basePath);
48
49     ///get the file list
50     memset(basePath,'\0',sizeof(basePath));
51     strcpy(basePath,"./XL");
52     readFileList(basePath);
53     return 0;
54 }

执行输出 :

时间: 2024-10-25 19:53:10

Linux C 读取文件夹下所有文件(包括子文件夹)的文件名的相关文章

vbs 获取当前目录文件数量的代码(不包括子文件夹中的)_vbs

复制代码 代码如下: i=0set fso=CreateObject("Scripting.FileSystemObject")set fs=fso.getfolder(".").filesfor each f in fsi=i+1nextmsgbox "文件总数:"&i

一个拷贝整个文件夹(包括子文件夹)的方法(原创)

原创 需要引用命名空间:using System.IO; /// <summary>  /// 拷贝文件夹(包括子文件夹)到指定文件夹下,源文件夹和目标文件夹均需绝对路径. 格式: CopyFolder(源文件夹,目标文件夹);  /// </summary>  /// <param name="strFromPath"></param>  /// <param name="strToPath"></

java读取文件夹下所有文件(包括子文件夹)的文件名

在编程的过程中,经常会用到对文件的读写操作等.比如,找出某一个文件夹下的所有文件名等. 下面的程序给出了,获取某一给定文件夹下所有文件的绝对路径的程序.可以作为某一个模块,在需要的时候直接使用. package src; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStrea

Linux下统计当前文件夹下的文件个数、目录个数_linux shell

1) 统计当前文件夹下文件的个数 复制代码 代码如下: ls -l |grep "^-"|wc -l 2) 统计当前文件夹下目录的个数 复制代码 代码如下: ls -l |grep "^d"|wc -l  3) 统计当前文件夹下文件的个数,包括子文件夹里的 复制代码 代码如下: ls -lR|grep "^-"|wc -l  4) 统计文件夹下目录的个数,包括子文件夹里的 复制代码 代码如下: ls -lR|grep "^d"

linux-javac为什么不能编译子文件夹的java文件

问题描述 javac为什么不能编译子文件夹的java文件 我在linux终端下编译:javac *.java 网上说这样做不是能编译当前文件夹下面所有的,包括子文件夹里面的java文件吗? 但是为什么我这样做了之后只编译了当前文件夹下面的java文件,子文件夹里面的java文件没有被编译啊 解决方案 因为java文件只会默认寻找当前包下面的java文件!而不会去寻找其子文件夹下的java文件!!如果含有子包的话需要import导入就可以了!!! 解决方案二: 可以试试下面语法: javac **

Beyond Compare自动展开子文件夹方法

  Beyond Compare自动展开子文件夹方法 打开Beyond Compare软件,选择文件夹比较会话,打开会话操作界面,单击"浏览文件夹"按钮,选择需要比较的文件夹,如下图所示,比较会话视图窗格内的文件夹有序排列,但并没有自动展开子文件夹和文件,应该如何进行设置呢? Beyond Compare 步骤一:单击工具栏"会话"按钮,在展开的菜单中选择"会话设置"选项卡,打开文件夹比较-会话设置窗口,并切换到处理选项卡页面. 步骤二:在文件夹

java实现读取、删除文件夹下的文件

  本文给大家分享的是java实现读取.删除文件夹下的文件,其中File.delete()用于删除"某个文件或者空目录"!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除,有需要的小伙伴可以参考下. java实现读取.删除文件夹下的文件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

文件读取-Android jni c++ 如何读取jni文件夹下的文件?

问题描述 Android jni c++ 如何读取jni文件夹下的文件? 在一个jni工程中,jni文件夹的结构如下: jni |--Android.mk |--Application.mk |--filer.h |--file.cpp |--res.txt file.cpp里边的代码如下: #include ""filer.h""#include <fstream>#include <string>using namespace std;j

java实现读取、删除文件夹下的文件_java

java实现读取.删除文件夹下的文件 package test.com; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; public class ReadFile { public ReadFile() { } /** * 读取某个文件夹下的所有文件 */ public static boolean readfile(String filepath) throws Fi