linux文件操作篇 (四) 目录操作
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
//创建文件夹 路径 掩码
int mkdir(const char *path, mode_t mode);
// 获取当前工作路径 buf用于接受路径缓存
char *getcwd(char *buf, size_t size);
// 进入文件夹 和cd一样
int chdir(const char *path); //打开路径并建立子目录流,返回子目录流指针
DIR *opendir(const char *filename);
//读取子目录流结构
struct dirent *readdir(DIR *dirp);
//函数返回值里记录着子目录流的当前位置
long telldir(DIR *dirp);
//对dir指定的子目录流中的目录数据项的指针进行设置,loc的值用来设置指针位置,他应该通过telldir调用获得。
void seekdir(DIR *dirp, long loc);
//关闭子目录流
int closedir(DIR *dirp);
dirent 结构体之一
struct dirent{ /* when _DARWIN_FEATURE_64_BIT_INODE is NOT defined */
ino_t d_ino; /* file number of entry */
__uint16_t d_reclen; /* length of this record */
__uint8_t d_type; /* file type, see below */
__uint8_t d_namlen; /* length of string in d_name */
char d_name[+]; /* name must be no longer than this */
};
举个例子
>> dir.c <<
//1. opendir()
//2. cddir()
//3. reader()
//4. closed()
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/stat.h> /*
* function: scan_dir 扫描当前 文件夹 下面的文件或文件夹
* param1: const char *dir 文件夹路径
* param2: int depth 记录文件夹深度,作用于打印时候的排版
* return: void
*/
void scan_dir(const char *dir, int depth)
{ //1.声明文件夹描述符和结构体等
DIR *dp; //文件夹描述符
struct dirent *entry; //文件夹结构体
struct stat statbuff; //文件属性结构体 if(dir == NULL) //先判断传参是否正确
{
puts("please in put dir_path");
return;
} //2. 打开文件夹
dp = opendir(dir);
if(dp == NULL)
{
puts("cant open this dir");
return;
} //3. 进入该文件夹
chdir(dir); //4.readdir会返回当前文件夹下面的子流信息,并且指针会指向下一个文件,
//每次返回的信息都保存在dirent的结构体指针中,每读完一个文件指针就会指向下一个文件,所以,读取最后一个文件时,因为没有下一个文件,返回指针为NULL
//利用这一特性,在扫描文件夹的时候,可以使用while循环。
while((entry = readdir(dp)) != NULL){ lstat(entry->d_name,&statbuff); //获取文件属性 ,entry->d_name 保存的就是文件路径 if(statbuff.st_mode & S_IFDIR) //判断是否是文件夹,如果是文件夹,就使用递归函数
{
if( strcmp(entry->d_name, ".") == || strcmp(entry->d_name,"..") == ) //跳过 . 和 .. 文件
{
continue;
}
printf(">%*s%s/\n",depth,"", entry->d_name); //将本次读取的文件夹名字打印出来
//scan_dir(entry->d_name,depth+4); //如果打开这个注释,将会进入所有子文件夹,因为这是递归操作 }else{ //如果不是文件夹,就直接输出文件名
printf("%*s%s\n",depth, "",entry->d_name );
} }
chdir("..");
closedir(dp); //最后关闭文件夹 }
>> dir.h <<
#ifndef __DIR_H
#define __DIR_H void scan_dir(const char *dir, int depth); #endif
>> main.c <<
#include <stdio.h>
#include <string.h> #include "dir.h" int main(int argc, char const *argv[])
{
puts("scan /Users dir");
scan_dir("/Users/ins/ke",); //文件夹路径根据个人随便定, 如果是系统文件夹要用sudo 来执行程序
return ;
}
2. 删除目录或文件操作
#include <unistd.h>
//删除文件夹
int rmdir(const char *path);
//删除文件
int unlink(const char *path);
linux文件操作篇 (四) 目录操作的更多相关文章
- LInux文件基础知识和文件目录操作(系统调用函数方式)
1.进程是处于活动状态的程序,某个用户通过操作系统运行程序所产生的进程代表着该用户的行为.如果用户不具备访问某个目录和文件的权限,那么该用户的进程也不能访问. 2.Linux系统中文件安全机制是通过给 ...
- 【C#公共帮助类】FTPClientHelper帮助类,实现文件上传,目录操作,下载等动作
关于本文档的说明 本文档使用Socket通信方式来实现ftp文件的上传下载等命令的执行 欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利. 本人自从几年前走上编程之路,一直致力于收集 ...
- C# FTPClientHelper共公类 实现文件上传,目录操作,下载等动作
文档说明 本文档使用Socket通信方式来实现ftp文件的上传下载等命令的执行 1.基本介绍 由于最近的项目是客户端的程序,需要将客户端的图片文件[切图]-[打包]-[ftp上传],现在就差最后一步了 ...
- 『学了就忘』Linux基础命令 — 19、目录操作的相关命令
目录 1.ls命令 2.cd命令 (1)绝对路径和相对路径 (2)cd命令的简化用法 3.pwd命令 4.mkdir命令 5.rmdir命令 常用目录操作的相关命令: ls命令 cd命令 pwd命令 ...
- HDFS API 操作实例(二) 目录操作
1. 递归读取文件名 1.1 递归实现读取文件名(scala + listFiles) /** * 实现:listFiles方法 * 迭代列出文件夹下的文件,只能列出文件 * 通过fs的listFil ...
- Linux学习笔记(二)Linux常用命令:权限、目录操作以及常见目录作用
一.Linux命令格式 命令 [选项] [参数] 注:(1)简化选项和完整选项 -a --all (2)当有多个选项是可以写在一起 -l -a 可以写为-la 二.权限 -rw-r--r--.&quo ...
- UNIX环境编程学习笔记(12)——文件I/O之目录操作
lienhua342014-09-18 1 引言 在 UNIX 系统中,目录是一种特殊的文件类型.我们可以使用 open 函数来打开目录,获取文件描述符,然后调用 stat 函数来获取目录的属性信息, ...
- LInux文件基础知识和文件目录操作(二)文件I/O操作
1.文件I/O操作分为两部分来讲解: 第一部分是非缓冲文件操作,这种操作适合于比较小规模文件的读写和对实时性要求很高的设备的数据通信,这类操作是系统调用提供的: 第二部分是缓冲文件操作,所面向的则是大 ...
- linux常用命令---终端与目录操作
终端相关操作 目录相关操作
随机推荐
- MySQL的基础(优化)2
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...
- 为我们的SSR程序添加热更新功能
前沿 通过上一篇文章 通过vue-cli3构建一个SSR应用程序 我们知道了什么是SSR,以及如何通过vue-cli3构建一个SSR应用程序.但是最后遗留了一些问题没有处理,就是没有添加开发时的热更新 ...
- C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践
Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介绍了在C4C里使用Cloud Application S ...
- 最新DNS汇集
最近几日DNS大规模抽风,网络环境是一天比一天恶劣,于是收集了一些良心的DNS服务器地址,以备不时之需. 国内服务器: 1.OpenerDNS:42.120.21.30 2.114DNS:114.11 ...
- 20165322 实验二《Java面向对象程序设计》实验报告
实验二<Java面向对象程序设计>实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实 ...
- ZJOI2019Day2余姚中学游记(4.23~4.26)
前言 \(Day2\),又是一场噩梦. 前段时间去做了挺多十二省联考和\(HNOI2019\)的题目,还订正掉了\(Day1\)的\(T1\)和\(T2\)(\(T3\)动态\(DP\)完全不想订正啊 ...
- Codeforces Round #460 (Div. 2)
A. Supermarket We often go to supermarkets to buy some fruits or vegetables, and on the tag there pr ...
- Release模式下无法调试打印对象的解决方式
之前碰到在release模式下无法打印对象的问题,只能切换到debug模式下调试, xcode release 模式下, 会关掉断点读取变量的上下文环境,以提高运行速度, ⚠️ 记得调试完再改回去,防 ...
- Intellij idea创建(包、文件)javaWeb以及Servlet简单实现(Tomcat)
准备:1. 安装jdk2. 安装tomcat 一.创建并设置javaweb工程 创建项目成功 创建包 创建Servlet 创建包成功,但是报错,原因是没有引入包 我们先表明 现在要引入servlet- ...
- Android学习笔记_12_网络通信之从web获取资源数据到Android
从web获取图片信息,并显示到android的imageView控件. 一.添加网络访问权限. <uses-permission android:name="android.permi ...