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

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

1 #include <dirent.h>
2 struct dirent
3 {
4    long d_ino; /* inode number 索引节点号 */
5    off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
6    unsigned short d_reclen; /* length of this d_name 文件名长 */
7    unsigned char d_type; /* the type of d_name 文件类型 */
8    char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
9 }

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

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
int readFileList(char *basePath)
{
    DIR *dir;
    struct dirent *ptr;
    char base[1000];

    if ((dir=opendir(basePath)) == NULL)
    {
        perror("Open dir error...");
        exit(1);
    }

    while ((ptr=readdir(dir)) != NULL)
    {
        if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0)    ///current dir OR parrent dir
            continue;
        else if(ptr->d_type == 8)    ///file
            printf("d_name:%s/%s\n",basePath,ptr->d_name);
        else if(ptr->d_type == 10)    ///link file
            printf("d_name:%s/%s\n",basePath,ptr->d_name);
        else if(ptr->d_type == 4)    ///dir
        {
            memset(base,‘\0‘,sizeof(base));
            strcpy(base,basePath);
            strcat(base,"/");
            strcat(base,ptr->d_name);
            readFileList(base);
        }
    }
    closedir(dir);
    return 1;
}

int main(void)
{
    DIR *dir;
    char basePath[1000];

    //get the current absoulte path
    memset(basePath,‘\0‘,sizeof(basePath));
    getcwd(basePath, 999);
    printf("the current dir is : %s\n",basePath);

    //get the file list
    //memset(basePath,‘\0‘,sizeof(basePath));
    //strcpy(basePath,"./XL");
    readFileList(basePath);
    return 0;
}

执行输出 :

时间: 2024-10-13 03:12:31

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

JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件

package ioTest.io3; import java.io.File; /* * 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件 . * 并将文件夹和文件名称打印在控制台上面.并且要显示文件目录的层级 * 注:运用了递归的算法. */ public class FileDemo3 { public static void main(String[] args) { File dir=new File("F:\\黑马学习日程\\"); //File dir=new Fi

Android程序函数 将assets文件夹下的文件复制到手机的sd卡中(包括子文件夹)

最近在做个功能是将asset文件夹下的所有文件(包括子文件)全部拷贝出来到指定目录下.所用的方法无非是用AssetManager.但是这里有个问题是也要讲子文件夹和子文件都要拷贝出来.到网上Google了下,也到baidu搜索了下,发现了很多类似问题.但好像都有问题.显然只能做到将asset直接目录下的文件拷贝出来,但子文件夹拷贝不出来,而且,碰到文件夹,会抛异常.无奈自己只好动手写了个.如下: private void CopyAssets(String assetDir,String dir

Java中递归的优缺点,Java写一个递归遍历目录下面的所有文件包括子文件夹里边的文件。

题目: 遍历出aaa文件夹下的文件 首先分析思路: 1.首先判断这个文件夹是否为文件,通过isFile()函数可以判断是否为文件. 2.然后通过isDirectory判断是否为目录. 3.如果是目录就使用递归遍历目录 代码如下: 1 import java.io.File; 2 3 public class ZuoYe { 4 public static void main(String[] args) { 5 //创建file对象 6 File f=new File("d://新建文件夹&qu

oc 文件操作,查看目录下所有文件包括子文件夹内包含的所有文件,循环遍历递归

FileManager.m #import "FileManager.h" @implementation FileManager + (void)showFiles:(NSString *)path;{ // 1.判断文件还是目录 NSFileManager * fileManger = [NSFileManager defaultManager]; BOOL isDir = NO; BOOL isExist = [fileManger fileExistsAtPath:path i

C#获取某一路径下的所有文件名信息(包括子文件夹)

贴代码了,这里使用的是C#控制台输出文件名到记事本中,文件名使用逗号隔开: using System; using System.IO; namespace ConsoleApplication1 { class Program { public static string FileName = ""; public static void Main(string[] args) { bool isContinute = true; WriteMessage("结束程序请输入

linux 查看文件夹下的文件个数(当前目录的文件数)//包含子目录

ls -l |grep "^-"|wc -l   //验证了redhat好用 或 find ./company -type f | wc -l 查看某文件夹下文件的个数,包括子文件夹里的. ls -lR|grep "^-"|wc -l 查看某文件夹下文件夹的个数,包括子文件夹里的. ls -lR|grep "^d"|wc -l 说明: ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录.链接.设备文件等) gre

shell命令查看某文件夹下的文件个数

shell命令查看某文件夹下的文件个数 2010-06-25 17:05:15|  分类: shell |字号 订阅 1.查看某文件夹下文件的个数: ls -l |grep "^-"|wc -l 或 find ./company -type f | wc -l 2.查看某文件夹下文件的个数,包括子文件夹里的: ls -lR|grep "^-"|wc -l 3.查看某文件夹下文件夹的个数,包括子文件夹里的: ls -lR|grep "^d"|wc

【Linux】Linux下统计当前文件夹下的文件个数、目录个数

统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 统计文件夹下目录的个数,包括子文件夹里的 ls -lR|grep "^d"|wc -l 统计当前文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计当前文件夹下目录的个数 ls -l |grep "^d"|wc -l 附: 统计输出信息的行数 wc -l 将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是

Linux命令行下统计当前文件夹下的文件个数

统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件的个数,包括子文件夹里的. ls -lR|grep "^-"|wc -l 统计文件夹下目录的个数,包括子文件夹里的. ls -lR|grep "^d"|wc -l 说明: ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录.链接.设备文