首页 > 系统相关 >linux获取子文件和子目录

linux获取子文件和子目录

时间:2023-07-29 10:44:13浏览次数:34  
标签:__ VA name 子目录 获取 mode linux dir define

linux获取子文件和子目录

#include <dirent.h>
#include <sys/stat.h>

#include <string>
#include <vector>

#include <stdio.h>

// #include <android/log.h>

#define TAG "[demo]"
// #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__);
// #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__);
// #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__);

#define LOGD(...) fprintf(stdout, __VA_ARGS__);
#define LOGE(...) fprintf(stderr, __VA_ARGS__);
#define LOGI(...) fprintf(stdout, __VA_ARGS__);


// mode=1: 文件;mode=2: 目录
void getFileList(std::string dir_name, std::vector<std::string>& files, int mode){
    if (dir_name.empty()) {
        LOGE("%s", "dir_name is empty!");
        return;
    }
    struct stat s;
    stat(dir_name.c_str(), &s);
    if(!S_ISDIR(s.st_mode)) {
        LOGE("%s %s %s", "dir_name: ", dir_name.c_str(), " is not a valid directory!");
        return;
    }
    struct dirent *filename;
    DIR *dir;
    dir = opendir(dir_name.c_str());
    if(NULL == dir) {
        LOGE("%s %s %s ", "Can not open dir: ", dir_name.c_str() ,"!");
        return;
    }
    while ((filename = readdir(dir)) != NULL) {
        if(strcmp(filename->d_name, ".") == 0 ||
           strcmp(filename->d_name, "..") == 0)
            continue;
//         std::string filePath = dir_name + "/" + filename->d_name;
        std::string filePath = filename->d_name;
        if (((mode & 1) && is_file((dir_name + "/" + filePath).c_str()))
            || ((mode & 2) && is_dir((dir_name + "/" + filePath).c_str()))
            || (mode == 0)) {
            files.push_back(filePath);
        }
    }
    closedir(dir);
}

bool is_file(const char* filestr) {
    struct stat   buffer;
    return (stat (filestr, &buffer) == 0 && S_ISREG(buffer.st_mode));
}

bool is_dir(const char* filestr) {
    struct stat   buffer;
    return (stat (filestr, &buffer) == 0 && S_ISDIR(buffer.st_mode));
}

标签:__,VA,name,子目录,获取,mode,linux,dir,define
From: https://www.cnblogs.com/minding/p/17589410.html

相关文章

  • ffmpeg 编译安装android和linux
    ffmpeg编译安装android和linux下载:https://github.com/FFmpeg/FFmpeghttps://www.ffmpeg.org/download.htmlenvirenmentndk:https://github.com/android/ndk/wiki/Unsupported-Downloadssudoapt-getinstallbuild-essentialpkg-configsudoapt-getintalllibx264-dev......
  • linux tar命令之小知识-解压指定层级目录以及指定文件
    我们以解压k8s二进制源码文件为例,只解压出第三层级目录下的kube-apiserver、kube-controller-manager、kubectl、kubelet、kube-proxy、kube-scheduler这几个文件。k8s源码文件目录结构,目录实在太多了,我删除了大部分,不在这里显示[root@k8s-master01tmp]#treekubernetesku......
  • VirtualEnv 20.24.0 发布 | 《Linux就该这么学》
    VirtualEnv20.24.0现已发布,VirtualEnv用于在一台机器上创建多个独立的Python运行环境,可隔离项目之间的第三方包依赖,为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻。新版更新内容如下:release20.23.1#2590修复CI#2593......
  • VirtualEnv 20.24.0 发布 | 《Linux就该这么学》
    VirtualEnv20.24.0现已发布,VirtualEnv用于在一台机器上创建多个独立的Python运行环境,可隔离项目之间的第三方包依赖,为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻。新版更新内容如下:release20.23.1#2590修复CI#2593......
  • linux console
    内核配置文件(比如arch\arm\configs\imx_v6_v7_defconfig)会配置宏CONFIG_CMDLINE,用于某些情况下配置内核CONFIG_CMDLINE="noinitrdconsole=ttymxc0,115200"由以下代码可知,当设备树没有bootargs,或者设置了CONFIG_CMDLINE_FORCE,则使用内核配置文件提供的CONFIG_CMDLINE......
  • Linux开发
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • Git常用命令(Git全局设置、获取Git仓库)
         ......
  • 使用scp在Linux服务器之间传输文件
    第一章、scp命令介绍scp就是securecopy,一个在linux下用来进行远程拷贝文件的命令。scp文件名1远程用户名@IP地址:文件名2几个参数:-v用来显示进度.可以用来查看连接-C使能压缩选项-P选择端口-4强行使用IPV4地址.-6强行使用IPV6地址.第二章、实......
  • 第三章 指针才是C语言的精髓(嵌入式Linux与物联网软件开发 C语言内核深度解析)
    这仅仅是读《嵌入式Linux与物联网软件开发:C语言内核深度解析》pdf的知识记录 地址:指的都是某个字节的地址。比如inta的空间大小有4个字节,每个字节都有一个地址(也就是有4个地址),但是只有首字节地址才能作为整个a空间的地址。也就是说,整个内存以1个字节为基本单位划分无数个地址,......
  • /usr/local/arm/5.4.0/usr/bin/../libexec/gcc/arm-none-linux-gnueabi/5.4.0/cc1: er
    arm-linux-gcca.c报错/usr/local/arm/5.4.0/usr/bin/../libexec/gcc/arm-none-linux-gnueabi/5.4.0/cc1:errorwhileloadingsharedlibraries:libmpc.so.3:cannotopensharedobjectfile:Nosuchfileordirectory安装arm-linux-gcca.c没安装g++解决方法:重新安装g++......