首页 > 编程语言 >C/C++ 对文件目录进行操作的常用函数

C/C++ 对文件目录进行操作的常用函数

时间:2024-06-19 17:01:09浏览次数:28  
标签:返回 文件目录 函数 C++ 头文件 char path 目录 dir

在C语言中,对目录进行操作的常用函数主要包括但不限于以下几个:

  1. opendir(const char *name):
    • 功能:打开指定路径的目录。
    • 返回值:成功时返回一个指向DIR结构体的指针,失败则返回NULL
    • 头文件<dirent.h>
  2. readdir(DIR *dirp):
    • 功能:从打开的目录中读取下一个目录条目。
    • 返回值:成功时返回一个指向dirent结构体的指针,代表当前条目;当没有更多条目时返回NULL
    • 头文件<dirent.h>
  3. closedir(DIR *dirp):
    • 功能:关闭由opendir打开的目录。
    • 返回值:成功时返回0,失败返回-1。
    • 头文件<dirent.h>
  4. mkdir(const char *pathname, mode_t mode):
    • 功能:创建一个新的目录。
    • 参数pathname是新目录的路径名,mode指定目录的权限位。
    • 返回值:成功时返回0,失败返回-1。
    • 头文件<sys/stat.h><sys/types.h><unistd.h>
  5. rmdir(const char *pathname):
    • 功能:删除一个空目录。
    • 返回值:成功时返回0,失败返回-1。
    • 头文件<unistd.h>
  6. chdir(const char *path):
    • 功能:更改当前工作目录到指定的路径。
    • 返回值:成功时返回0,失败返回-1。
    • 头文件<unistd.h>
  7. getcwd(char *buf, size_t size):
    • 功能:获取当前工作目录的路径并存入缓冲区buf中。
    • 返回值:成功时返回指向缓冲区的指针,失败返回NULL
    • 头文件<unistd.h>
  8. stat(const char *path, struct stat *buf):
    • 功能:获取指定文件或目录的状态信息(如大小、修改时间、权限等)。
    • 返回值:成功时返回0,失败返回-1。
    • 头文件<sys/stat.h>

这些函数构成了在C语言中进行目录操作的基础工具集,可以用于遍历目录、创建/删除目录、改变当前目录以及获取目录或文件的元数据信息等操作。

相关代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>   //定义了用于遍历目录结构的类型和函数
#include <sys/stat.h> //提供了用于获取文件或目录状态信息的接口

int listFile(char *dirPath)
{
    DIR *dir = opendir(dirPath);
    struct stat file_stat;
    char fullPath[PATH_MAX];
    struct dirent *entry;

    // 打开指定路径的目录
    if (!dir)
    {
        perror("opendir failed\n");
        return -1;
    }

    while ((entry = readdir(dir)) != NULL)
    {
        // 跳过当前自身目录"."和".."父目录
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
        {
            continue;
        }

        // 构建完整路径
        snprintf(fullPath, PATH_MAX, "%s/%s", dirPath, entry->d_name);

        // 获取文件状态信息
        if (stat(fullPath, &file_stat) == -1)
        {
            perror("failed to get stats for file\n");
            continue;
        }

        // 打印文件名和大小
        printf("%-20s %ld bytes\n", entry->d_name, (long)file_stat.st_size);
    }

    // 关闭目录
    closedir(dir);

    return 0;
}

int main()
{
    char dir_path[PATH_MAX]; // 使用字符数组存储目录路径

    printf("请输入目录地址: ");
    fgets(dir_path, PATH_MAX, stdin); // 使用fgets读取输入,包括空格

    // 移除fgets读取的末尾换行符(如有)
    size_t len = strlen(dir_path);
    if (len > 0 && dir_path[len - 1] == '\n')
    {
        dir_path[len - 1] = '\0';
    }

    listFile(dir_path); // 调用listFile函数

    return 0;
}

类似文章还有C/C++ 操作文件常用的函数

标签:返回,文件目录,函数,C++,头文件,char,path,目录,dir
From: https://blog.csdn.net/zzzlearning/article/details/139807655

相关文章

  • java内置的函数式接口介绍及使用举例
    lambda表达式的本质:作为函数式接口的实例如果在一个接口中,只声明了一个抽象方法,则此接口就被称为函数式接口,我们可以在一个接口上使用,@FunctionalInterface注解来验证该接口是否为函数式接口(吐过在该接口中写两个方法,则会编译失败)正是因为抽象方法中只有一个方法,所以我们才可以......
  • React之类组件与函数组件的区别
         类组件和函数组件在React中是两种定义UI组件的方式,它们在语法、生命周期方法、状态管理等方面存在一些差异函数组件定义:函数组件是通过一个普通的JavaScript函数定义的,接受props作为参数,并返回一个React元素。特点:简洁、易于阅读和测试。无法使用生命......
  • MYSQL 数字(Aggregate)函数
    目录1、AVG()2、MAX()3、MIN()4、SUM()5、COUNT()6、LIMIT()1、AVG()解释:返回数值列(字段)的平均值。语法格式:SELECTAVG(column_name)FROMtable_name中文注释:select AVG(数值列/字段)from表名;用法:SELECTAVG(column_name)FROMtable_name2、MAX()解......
  • centos7离线升级gcc , 报错:/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found
     因为需要依赖gcc高版本但是目前服务器版本是4.8.5的然后服务器又是内网所以只能离线升级gcc 分别下载https://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gzhttps://ftp.gnu.org/pub/gnu/gmp/gmp-6.1.0.tar.bz2https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gzhttp:......
  • Python快速进修指南:函数基础
    今天介绍的是函数,讨论函数以及与Java方法的区别。python具体学习资料在下方分享:与Java方法不同,函数不需要像Java方法一样讲究修饰符等其他特性,它只需要使用"def"关键字进行声明。另外,函数的参数也与Java方法有所不同,Java方法中不存在默认参数的概念,而在Python中,函数参数是可......
  • C/C++ 操作文件常用的函数
    C语言中操作文件常用的函数包括但不限于以下几种:打开和关闭文件fopen(constchar*path,constchar*mode):用于打开一个文件,返回一个指向FILE结构体的指针,path是文件路径,mode定义了文件的打开模式(如读、写、追加等)。fclose(FILE*stream):关闭由fopen()打开的文件,并刷新缓......
  • Java调用mysql后台函数的例子
    在Java中调用MySQL后台的存储函数(注意,这里我们区分存储过程和存储函数:存储过程没有返回值,但可以通过输出参数返回数据;而存储函数有一个返回值)时,你需要使用CallableStatement来执行这个函数并获取返回值。以下是一个简单的例子,说明如何在Java中调用MySQL的存储函数:MySQL存储函......
  • 请编写函数fun,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ASCII码降序排列
    请编写函数fun,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ASCII码降序排列#include<stdio.h>#include<string.h>voidsortDescending(charstr[]){intlen=strlen(str);if(len!=7) {printf("字符串长度不为7,无法进行排序。\n");......
  • 编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并
    编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。#include<stdio.h>#defineMAX100intisPrime(intnum){if(num<2){return0;}for(inti=2;i*i<=num;......
  • C++数据格式化3 - 格式化时间区间(使用时长)
    1.关键词2.strfmt.h3.strfmt.cpp4.测试代码5.运行结果6.源码地址1.关键词关键字:C++数据格式化字符串处理std::string时间区间跨平台应用场景:想对一个时间区间(如用时:2000s)进行格式化,转化成人类易读的时分秒的格式。2.strfmt.h#pragmaonce#include......