linux c 判断路径是 目录还是文件

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

主要函数: stat(),opendir(),readdir(),

主要结构体:struct dirent  和 struct stat

主要宏:S_ISDIR(),     S_ISREG()

 

函数 stat()用于获取一个文件路径的信息,并把获取到的信息放到结构体 struct stat 中

函数 opendir()用于生成一个目录指针DIR

函数 readdir()用于读取目录指针 DIR 中的信息,返回的值为一个 struct dirent 结构体

 

结构体 struct dirent 用于保存一个目录的属性。这里用到的只是该结构体的 d_name 成员,用于保存目录下的文件名

结构体 struct stat 用于保存 一个文件路径的信息

 

S_ISDIR()用于判断一个文件路径是不是一个目录,是则返回1,否则返回0

S_ISREG()用于判断一个文件路径是不是一个普通文件,是则返回1,否则返回0
 

实例代码:

#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
 
int main(int argc, char const *argv[])
{
	char const*path = argv[1];
	struct stat s_buf;
 
	/*获取文件信息,把信息放到s_buf中*/
	stat(path,&s_buf);
 
	/*判断输入的文件路径是否目录,若是目录,则往下执行,分析目录下的文件*/
	if(S_ISDIR(s_buf.st_mode))
	{
		printf("[%s] it is a dir\n",path);
		struct dirent *filename;
		DIR *dp = opendir(path);
 
		/*readdir()必须循环调用,要读完整个目录的文件,readdir才会返回NULL
		若未读完,就让他循环*/
		while(filename = readdir(dp))
		{
			/*判断一个文件是目录还是一个普通文件*/
			char file_path[200];
			bzero(file_path,200);
			strcat(file_path,path);
			strcat(file_path,"/");
			strcat(file_path,filename->d_name);
			
			/*获取文件信息,把信息放到s_buf中*/
			stat(file_path,&s_buf);
 
			/*判断是否目录*/
			if(S_ISDIR(s_buf.st_mode))
			{
				printf("[%s] is a dir\n",file_path);
			}
 
			/*判断是否为普通文件*/
			if(S_ISREG(s_buf.st_mode))
			{
				printf("[%s] is a regular file\n",file_path);
			}
		}
	}
 
	/*若输入的文件路径是普通文件,则打印并退出程序*/
	else if(S_ISREG(s_buf.st_mode))
	{
		printf("[%s] is a regular file\n",path);
		return 0;
	}
 
	return 0;
}

 

linux下C语言如何操作文件(一) 介绍linux下的C语言操作文件的相关函数,做了轻度的封装。 阅读详情

相关推荐

PADS安装教程(超详细)

声明:个人实践 一、工具准备 pads9.5完整破解版百度网盘提取码【wjx9】 链接:https://pan.baidu.com/s/1pIP6BJO435ssmF7Hjwyz8A 提取码:wjx9 安装环境:win10 64位 二、开始解压安装 关闭杀毒,exe以管理员身份运行 点击【skip】,不然又得licese 点击【agree】 点击【modify】 设置安装的工具、路径及工程路径 设置完成后,开始【install】 在之后注册。 将Crack复制到PADS安装目录

qq_42057393的博客 5万+

Linux下提取文件夹下的所有文件名称

Linux下提取文件夹下的所有文件名称

Eddy的博客 8295

Gartner《构建可扩展数据产品建设框架》心得

数据产品化:从概念到落地的实践指南 当前企业正从传统数据需求模式转向数据产品化新范式。本文系统阐述了数据产品的核心价值、定义分类和实施框架,指出成功关键是将数据包装为可复用、可扩展的产品。Gartner框架强调产品思维,提出4阶段12步实施路径,涵盖设计、工程、发布和监控全流程。文章特别提醒要避免7大常见误区,如简单重命名报表、忽视元数据治理等,建议采取MVP策略,90天内完成从价值验证到产品落地的闭环。实施中需平衡技术选型与业务需求,建立跨职能团队,并通过AARRR模型持续追踪产品价值。

2501_91410404的博客 983

Linux获取文件夹下的所有文件名称

linux获取文件夹下的所有文件名称

科小洋的博客 1651

shell中提取文件名或目录

很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取也文件名file.txt,提取出目录/dir1/dir2,提取出文件后缀txt等。 下面介绍两种常用的方法来进行相关的操作。 一、使用1、{} 1、1、{var##*/} 该命令的作用是去掉变...

S____M的博客 2900

Linux中获取指定目录文件

借鉴别人的方法,记录一下。(参考链接:http://sexywp.com/bash-how-to-get-the-basepath-of-current-running-script.htm) #! /bin/bash # get all filename in special path path=$(cd `dirname $0`; pwd) //此处是获取当前目录 echo "we a...

chenhy24的博客 8035

Linux shell中提取文件名和目录名的一些方法

 很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取也文件名file.txt,提取出目录/dir1/dir2,提取出文件后缀txt等。 下面介绍两种常用的方法来进行相关的操作。 一、使用${} 1、${var

qiangchen99的专栏 3948

如何判断linux中这个路径文件还是目录

如何判断linux中这个路径文件还是目录 #include <stdio.h> #include <sys/stat.h> #include <unistd.h> int main(int argc,char *argv[]) { struct stat st; printf("%s",argv[1]); stat(argv[1],&st); if (...

kotewall的博客 1215

Linux命令行中判断多个文件目录是否存在 C语言实现

#在Linux命令行中判断多个文件目录是否存在 Linux命令行中判断多个文件目录是否存在 制作一个小程序,实现查看文件/目录/文件路径是否存在,并且能 够同时判断多个。 Linux C语言程序 命令行输入 显示结果 ...

calebcay的博客 1793

linux c 删除指定文件内容,linux下使用c语言删除指定目录下所有文件

linux下使用c语言删除指定目录下所有文件2018-11-21///////////////////////////////////////////////////////Name: DeleteFile//Purpose: Delete file in the special directory//Author: Alex Wang//Crea...

weixin_29790467的博客 458

Linux 用C语言判断文件文件夹

Linux 用C语言判断文件文件夹 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;unistd.h&gt; #include &lt;dirent.h&gt; int access(const char *pathname, int mode); int is_file_exist(const ch...

weixin_33849215的博客 455

递归遍历Linux下的目录文件源码实现

网上搜到的结果大都不令人满意,这里综合了网上的结构,做了小许改动.

雪峰流云 1738

Linux C语言磁盘U盘容量读取、目录列表读取、文件夹大小读取

Linux C语言磁盘U盘容量读取、目录列表读取、文件夹大小读取C语言源代码 #include <stdio.h> #include <sys/statfs.h> #include <string.h> #include <dirent.h> #include <stdbool.h> #include <sys/stat.h> /****************************************************

SlaveOpen的博客 2441

linux 指令实现,linux pwd指令的C实现

linux pwd指令的C实现pwd指令的功能介绍linux pwd命令用于显示工作目录执行pwd命令可立刻得知当前所在工作目录的绝对路径名称。示例:查询系统手册如图所示,getcwd的描述是“get current working directory”,这与我们要实现的pwd命令的功能非常相近,于是我继续查询getcwd如图所示,有关getcwd的用法及描述中提到它的功能是返回一个包含调用程序所...

weixin_39669133的博客 294

Linux C语言编程实战:使用目录操作API高效查找.c文件

Linux系统编程中,文件目录操作是核心基础。通过POSIX标准定义的目录操作函数(如opendir、readdir、closedir),程序可以直接与文件系统交互,实现高效、可控的目录遍历。这种底层API调用避免了依赖外部命令(如ls)带来的可移植性与控制力问题,是理解操作系统文件管理机制的关键。结合字符串处理与文件属性获取(如使用lstat判断文件类型),可以构建出健壮的工具,用于源码管理、构建系统依赖分析等实际工程场景。本文以实战中常见的“递归扫描C源文件”需求为例,深入解析了目录遍历、错误处理与

weixin_31315567的博客 332

linux否家目录,Linux判断否是一个目录还是一个文件的方法.doc

Linux判断否是一个目录还是一个文件的方法Linux判断是否是一个目录还是一个文件的方法功能描述:获取一些文件相关的信息。用法:#include #include #include int stat(const char *path, struct stat *buf);int fstat(int filedes, struct stat *buf);int lstat(const char...

weixin_39822423的博客 236

linux中的读目录,在linux中读取目录内容

我们如何在Linux中使用C语言读取目录的内容(子目录文件名).这是一个递归程序,以递归方式打印所有子目录文件的名称.用法:./ a.out路径名不检查作为命令行参数提供的初始路径名的错误条件.基本代码流程:读取当前目录中的所有条目.如果是目录名,则将其名称添加到路径名中,并以递归方式调用函数.否则打印文件的名称.有关特定函数的详细信息可以在dmuir指出的各个手册页中引用:#include#...

weixin_39996096的博客 154

【操作系统存储篇】Linux文件基本操作

可以通过开头第一个字母判断文件类型,比如白色光标一行以b开头,表示快设备文件。touch:创建文件;vim:创建或修改文件;cat:查看文件内容;mkdir:创建文件夹;rm -r:递归的删除文件夹里的东西从而删除文件夹Linux有很多目录Linux一切皆是文件,包括进程、设备等。相对路径:相对于当前的操作目录文件位于哪个目录。绝对路径 :从根目录开始的路径

xiaoliii0401的博客 580

输出linux下给定目录的所有子目录

#include<stdio.h> #include <dirent.h> #include <string.h> int form=0;//用来控制格式 void PrintDir(char* a) { char base[1000]; struct dirent* entry; DIR* d = opendir(a);//打开文件a并 将返回值赋给d if (d == NULL) printf("d == NULL");

Cheney ' blog 2081

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

本文:http://www.cnblogs.com/xudong-bupt/p/3504442.html Linux C  下面读取文件夹要用到结构体struct dirent,在头#include 中,如下: #include struct dirent { long d_ino; /* inode number 索引节点号 */ off_t d_off; /*

maopig的专栏 7749
上一篇: golang 读取文件
下一篇: linux c send recv MSG_NOSIGNAL参数
whatday
博客等级 码龄20年 3809粉丝 96原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值