首页 > 其他分享 >文件目录的相关操作

文件目录的相关操作

时间:2024-08-08 09:54:22浏览次数:13  
标签:文件目录 函数 return opendir 相关 操作 include 目录 dir

opendir 函数

包含头文件: 确保在代码中包含必要的头文件。

#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>

打开目录: 使用 opendir 函数打开目录。该函数返回一个指向 DIR 类型的指针。

DIR *dir = opendir("/path/to/directory");
if (dir == NULL) {
    perror("opendir");
    return 1;
}

读取目录内容: 使用 readdir 函数读取目录内容。该函数返回一个指向 struct dirent 类型的指针。

struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
    printf("%s\n", entry->d_name);
}

关闭目录: 使用 closedir 函数关闭目录。

closedir(dir);
  • opendir(const char *name): 打开指定名称的目录,返回指向 DIR 结构的指针。如果失败,返回 NULL
  • readdir(DIR *dirp): 读取目录中的下一个条目,返回指向 struct dirent 结构的指针。如果读取到目录末尾或发生错误,返回 NULL
  • closedir(DIR *dirp): 关闭由 opendir 打开的目录流。
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>

int main() {
    DIR *dir;
    struct dirent *entry;

    // 打开目录
    dir = opendir("/path/to/directory");
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

    // 读取目录内容
    while ((entry = readdir(dir)) != NULL) {
        printf("%s\n", entry->d_name);
    }

    // 关闭目录
    closedir(dir);

    return 0;
}

 

struct dirent 结构

struct dirent 结构定义在 <dirent.h> 头文件中,包含以下成员:

struct dirent {
    ino_t          d_ino;       /* inode number */
    off_t          d_off;       /* offset to the next dirent */
    unsigned short d_reclen;    /* length of this record */
    unsigned char  d_type;      /* type of file */
    char           d_name[256]; /* filename */
};

常用成员包括:

  • d_name: 文件名。
  • d_type: 文件类型。
  • DT_BLK: 块设备
  • DT_CHR: 字符设备
  • DT_DIR: 目录
  • DT_FIFO: FIFO (命名管道)
  • DT_LNK: 符号链接
  • DT_REG: 常规文件
  • DT_SOCK: 套接字
  • DT_UNKNOWN: 未知类型

readdir 函数

包含头文件: 确保在代码中包含必要的头文件。

#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

打开目录: 使用 opendir 函数打开目录。该函数返回一个指向 DIR 类型的指针。

DIR *dir = opendir("/path/to/directory");
if (dir == NULL) {
    perror("opendir");
    return 1;
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

读取目录内容: 使用 readdir 函数读取目录内容。该函数返回一个指向 struct dirent 类型的指针。

struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
    printf("%s\n", entry->d_name);
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

关闭目录: 使用 closedir 函数关闭目录。

closedir(dir);
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

closedir 函数

int closedir(DIR *dirp);
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
  • 参数: dirp 是一个指向 DIR 结构的指针,表示要关闭的目录流。
  • 返回值: 如果成功,返回 0。如果失败,返回 -1,并设置 errno 以指示错误。

使用步骤

  1. 打开目录: 使用 opendir 函数打开目录。
  2. 读取目录内容: 使用 readdir 函数读取目录内容。
  3. 关闭目录: 使用 closedir 函数关闭目录。

chdir

chdir 用于更改当前工作目录。

 函数声明

int chdir(const char *path);
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
参数
  • path: 目标目录的路径。
返回值
  • 成功返回 0
  • 失败返回 -1,并设置 errno
#include <unistd.h>
#include <stdio.h>

int main() {
    if (chdir("/path/to/directory") == -1) {
        perror("chdir");
        return 1;
    }
    // 成功更改工作目录
    return 0;
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

getcwd

getcwd 用于获取当前工作目录的路径。

函数声明
char *getcwd(char *buf, size_t size);
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
参数
  • buf: 存储路径的缓冲区。
  • size: 缓冲区的大小。
返回值
  • 成功返回 buf
  • 失败返回 NULL,并设置 errno

 

mkdir

mkdir 用于创建新目录。

函数声明
int mkdir(const char *pathname, mode_t mode);
参数
  • pathname: 要创建的目录的路径。
  • mode: 目录的权限位。
返回值
  • 成功返回 0
  • 失败返回 -1,并设置 errno
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>

int main() {
    if (mkdir("/path/to/directory", 0755) == -1) {
        perror("mkdir");
        return 1;
    }
    // 成功创建目录
    return 0;
}

 

rmdir

rmdir 用于删除空目录。

函数声明
int rmdir(const char *pathname);
参数
  • pathname: 要删除的目录的路径。
返回值
  • 成功返回 0
  • 失败返回 -1,并设置 errno
#include <unistd.h>
#include <stdio.h>

int main() {
    if (rmdir("/path/to/directory") == -1) {
        perror("rmdir");
        return 1;
    }
    // 成功删除目录
    return 0;
}

 

stat

stat 用于获取文件或目录的状态信息。

函数声明
int stat(const char *pathname, struct stat *statbuf);
参数
  • pathname: 文件或目录的路径。
  • statbuf: 存储状态信息的结构体指针。
返回值
  • 成功返回 0
  • 失败返回 -1,并设置 errno
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>

int main() {
    struct stat sb;
    if (stat("/path/to/file_or_directory", &sb) == -1) {
        perror("stat");
        return 1;
    }

    printf("File size: %lld bytes\n", (long long) sb.st_size);
    printf("Permissions: %o\n", sb.st_mode & 0777);
    printf("Last modified: %ld\n", (long) sb.st_mtime);
    return 0;
}

标签:文件目录,函数,return,opendir,相关,操作,include,目录,dir
From: https://blog.csdn.net/a8687216/article/details/141016811

相关文章

  • 介绍一款新奇的开源操作系统:GodoOS
    在快节奏的现代办公环境中,一款高效、集成化的操作系统无疑是提升工作效率的利器。今天,我们要为您隆重介绍——GodoOS,一款专为内网办公环境设计的全能操作系统。它不仅仅是一个工具,更是您团队协作与文件管理的得力助手,将彻底改变您的工作方式,带来前所未有的便捷体验! 【全能......
  • 嵌入式实时操作系统(RT-Thread、FreeRTOS、UCOSIII)
    实时操作系统(RT-Thread、FreeRTOS、UCOSIII)文章目录`实时操作系统(RT-Thread、FreeRTOS、UCOSIII)``专有名词概念``1、什么是嵌入式``嵌入式系统的特点``2、什么是实时``3、什么是操作系统``操作系统主要功能和特性``常见的操作系统类型包括``4、嵌入式实时操作系统``关......
  • 对于找到的每封唯一电子邮件,加载所有相关附件
    我正在尝试自动创建包含与电子邮件关联的所有附件的电子邮件。我有一个Excel文档,正在引用电子邮件和附件。index=0counter=0foremailinemails:mailItem=olApp.CreateItem(0)mailItem.Subject=mailItem.BodyFormat=1mailItem.Body=......
  • 使用触发器来审计表的DML、DDL操作
    最近帮客户排查某问题时,因为怀疑应用对某张配置表有变更,所以需要对这张表的所有操作进行审计。原本Oracle对某张表的审计是非常方便的,一条命令就可以实现,也不需要费心自定义审计表。--启用对表DEPT的插入、更新和删除操作的审计AUDITINSERT,UPDATE,DELETEONDEPTBYACCE......
  • Java数据结构 | 二叉树基础及基本操作
    二叉树一、树型结构1.1树的概念1.2关于树的一些常用概念(很重要!!!)1.3树的表示形式1.4树的应用二、二叉树2.1二叉树的概念2.2两种特殊的二叉树2.3二叉树的性质2.4二叉树的存储2.5二叉树的基本操作2.5.1代码说明2.5.2二叉树的遍历2.5.3二叉树的基本操作1、获取树......
  • 使用触发器来审计表的DML、DDL操作
    最近帮客户排查某问题时,因为怀疑应用对某张配置表有变更,所以需要对这张表的所有操作进行审计。原本Oracle对某张表的审计是非常方便的,一条命令就可以实现,也不需要费心自定义审计表。--启用对表DEPT的插入、更新和删除操作的审计AUDITINSERT,UPDATE,DELETEONDEPTBYACCE......
  • ShardingSphere之ShardingProxy实战操作、分布式事务
    文章目录简介基础使用部署ShardingProxy配置分库分表策略分布式事务机制介绍XA事务Demo使用另外两种XA事务管理器简介ShardingSphere的两个核心产品分别为ShardingJDBC和ShardingProxy。前文已经详细介绍了ShardingJDBC的具体使用,接下来介绍服务端的分库分表Shar......
  • 相关性检验
    文章目录Pearson相关系数Spearman等级相关系数Cochran'sQ检验Kappa一致性系数Kendall相关系数实例分析总结在数据分析的广阔天地中,相关性检验是探索变量间关系的一把钥匙。本文将带领大家了解几种常用的相关性检验方法:Pearson、Spearman、Cochran’sQ、Kappa和Kenda......
  • 泳泳馆押金原路退回系统,一键操作秒到账 押金+手牌+电子押金单
     一、游泳馆手牌收押金必要性游泳馆手牌收押金有以下必要性:1.防止手牌丢失:手牌是顾客在游泳馆内存储个人物品和进出更衣室的重要凭证。收押金可以让顾客更加重视手牌,降低丢失的概率。比如说,有的顾客可能会因为粗心大意随手放置手牌,如果没有押金的约束,可能就不会太在意寻找......
  • arduino相关函数
    I/O相关pinMode(pin,mode)作用:配置引脚以及引脚模式pin:为设置的引脚1,2,...mode:设置引脚的模式OUTPUT:输出模式INPUT:输入模式INPUT_PULLUP:上拉输入模式digitalWrite(pin,value)作用:配置引脚的值,设为高电平或低电平pin:设置的引脚value:HIGH或LOW设置为低......