目录操作 递归打印目录 DIR drent
目录操作
1.查找当前目录下,所有文件,文件内容有string,打印出文件名
/*打印当前目录的文件名*/
/*
./a.out string
查找当前目录下,所有文件,文件内容有string,打印出文件名
*/#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>#define N 1024int main(int argc, char **argv)
{DIR *dp;struct dirent *item;FILE *fp;char buf[1024];if(argc != 2){printf("Use:./a.out string\n");}dp = opendir(".");if(dp == NULL){perror("open dir file\n");}while( (item = readdir(dp)) ){
// if( strstr(item->d_name, argv[1]) != NULL){
// printf("%s\n", item->d_name);fp = fopen(item->d_name, "r");while( fgets(buf, N, fp) != NULL){ //fgets读取包括\n (abchello\n\0)if( strstr(buf, argv[1]) != NULL){buf[strlen(buf) - 1] = '\0'; printf("%s\n%s\n", item->d_name, buf);} }}closedir(dp);return 0;
}/*
akaedu@akaedu:~/ms/read_open_dir$ ./dir stdio.h
read_to_file_open.c
#include <stdio.h>
dir.c
#include <stdio.h>
read_to_file.c
#include <stdio.h>
akaedu@akaedu:~/ms/read_open_dir$
*/
2.递归打印目录
----------------------------------------------------------------------------------------
struct dirent
{long d_ino; /* inode number 索引节点号 */off_t d_off; /* offset to this dirent 在目录文件中的偏移 */unsigned short d_reclen; /* length of this d_name 文件名长 */unsigned char d_type; /* the type of d_name 文件类型 */char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长256字符 */
}struct dirent中的几个成员:d_type:4表示为目录,8表示为文件d_reclen:16表示子目录或文件,24表示非子目录经过本人亲自试验发现:d_reclen:16表示子目录或以.开头的隐藏文件,24表示普通文本文件,28为二进制文件,等等d_name:目录或文件的名称----------------------------------------------------------------------------------------/*功能:演示了在Linux下利用C语言递归遍历指定目录下的子目录(不含隐藏目录)和文件
*/
#include <stdio.h>
#include <dirent.h> //for opendir(),readdir(),closedir()
#include <string.h>void print_dir(char * dir_path)
{DIR *pdir; //打开目录的句柄,类似于 FILE *fpstruct dirent *dp = NULL;if( ( pdir = opendir(dir_path) ) != NULL ) //打开路径(目录),返回一目录句柄{while( (dp = readdir(pdir)) != NULL ) //读目录信息,返回值为一个struct dirent的结构体{if( dp->d_type == 8 ) // d_type:8-文件,4-目录{printf("File:\t%s\n", dp->d_name); //打印文件名称 }else if( (dp->d_type == 4) && (dp->d_name[0] != '.') ) //是目录的情况下,打印出除 '.'目录 '.' 表示当前目录自身,外的目录{printf("\n[Dir]: %s\n", dp->name);print_dir(dp->name); //递归遍历子目录printf("返回[%s]\n", dp->name);}}closedir(pdir);}else{printf("Open Dir-[%s] failed.\n", dir_path);}}int main(int argc, char *argv[])
{/* if( argc != 2 ){printf("Use:./a.out path\n");}*/ char char path[] = "/home/zcm/program/test";print_dir(path);return 0;
}
目录操作 递归打印目录 DIR drent相关推荐
- java当中递归打印目录树
一:上码 package cn.wyj.one;import java.io.File;public class Demo8_递归打印目录树 {public static void main(Stri ...
- python递归打印目录树
'''尚学堂学习笔记,复习用''' 递归打印目录树 import osall_files = []#传入文件路径和层级 def get_all_files(path, level):#引用该路径下的子 ...
- python目录操作函数_Python3目录操作
Python3 目录操作 常见的目录操作: 显示当前目录 切换目录 新建.删除目录.移动.复制 显示目录内容 判断目录.文件是否存在 目录操作常用的函数如下: os.listdir() # 列出目录下 ...
- 时间:2014年3月27日文件和目录操作函数
主要内容: 目录操作:打开.读取.关闭.创建.重命名.删除 文件操作:打开.读.写.关闭.重命名.删除 信息获取函数 filemtime() filesize() file_exists() is_ ...
- 三十四 操作文件和目录
如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操 ...
- 大数据学习笔记1.3 Linux目录操作
Linux目录操作 一.常用权限操作 (一).常用权限操作 (1)chgrp命令 (2)chown命令 (3)chmod命令 (二).权限操作 1.创建文件,设置其用户组 2.修改文件的所有者 3.修 ...
- PHP怎样在index建一个txt文件,PHP教程第七十五讲——PHP文件系统与文本数据操作:PHP目录操作详解...
在PHP中,常见的PHP目录操作包括打开目录.关闭目录.读取目录中的文件.创建目录及删除目录等. 1.打开目录: 在PHP中使用opendir函数打开目录.该函数返回一个资源对象,用于储存当前的目录资 ...
- poi 5.2.2 操作word【目录】
poi 3.17操作Word工具包,点击此处 当前版本 5.2.2 ,版本不同,写法略有差异 - poi-5.2.2 操作word [段落] - poi-5.2.2 操作word [表格] - poi ...
- 文本操作的相关概念和方法+pickle序列化+csv文件操作+操作系统命令(os和os.path)+shutil模块+zipfile模块+递归算法打印目录树
目录 一.文件操作 1.文本文件和二进制文件 2.文件操作相关模块概述 3.文件文本的写入 4.中文乱码问题的解决 5.close()关闭文件流--try异常管理 6.关闭流要点:_with上下文管理 ...
- 利用VB函数Dir()实现递归搜索目录
它没有采用任何的控件形式,也没有调用系统API函数FindFirst,FindNext进行递归调用,和别人有点不同的就是我用的是VB中的Dir()函数.事实上,直接采用Dir()函数是不能进行自身的 ...
最新文章
- 名校算法博士找工作两月无果,因本科是不知名学校被婉拒
- string.Format 格式化
- 浪潮云完成6亿元B轮融资,正推进上市;VMware收购AI初创公司Bitfusion;小爱同学App在苹果应用商店下架……...
- 从底层分析c和类c语言
- MVC SignalR Hub实时聊天实时Web解决方案
- 清华,就要成为地表最强研究机构了
- int输出%f浮点值是0,double/float 浮点数%d输出0的原因
- 亚马逊多账号操作如何判断关联
- 史丰收速算 (蓝桥杯)
- c语言标准库详解(九):实用函数stdlib.h
- 二进制数的反码和补码
- gmx solvate命令
- Get “https://github.com/electron-userland/electron-builder-binaries/releases/download/appimage-12.0.
- 棋盘(Checkerboard)算法
- 2012年终总结之pcode概述
- dos下用move命令移动文件夹
- RenderScript 让你的Android计算速度快的飞上天!
- python使用代理爬虫_python爬虫requests使用代理ip
- STM32F407-外部中断
- 同一网段的概念以及计算