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常用命令---终端与目录操作
终端相关操作 目录相关操作
随机推荐
- day007-线程池、Lambda
1. 线程池 就好生活中的游泳池,可以容纳多人在池子里游泳.戏水.线程池里可以有多个正在运行的线程,同时执行已经提交了的多个任务. 什么是线程池?一个用来创建和管理线程的容器. 线程池的原理 线程复用 ...
- February 27 2017 Week 9 Monday
All the bright precious things fade so fast. 所有的光鲜靓丽都敌不过时间. Try to make some things endurable and et ...
- March 24 2017 Week 12 Friday
Our lives are brief, that is why it's important to search for meaning. 人生短暂,所以才要寻找它的意义. What can we ...
- React总结和遇到的坑
一.react项目 前端react后端node:https://github.com/GainLoss/react-juejin 前端react后端Pyton:https://github.com/G ...
- 找出OData service出错根源的小技巧
SAP的Fiori应用是通过OData和后台交互的.在使用Fiori应用时您可能会遇到这样的错误消息: 这个错误消息没有包含有助于partner或者客户定位问题根源的线索. 下面是如何在后台找出问题根 ...
- 小故事学设计模式之Decorate: (二)老婆的新衣服
老婆有一件蓝色的裙子和一件粉色的裙子, 不管怎么穿,她还是原来的老婆. 但是在软件里就不一定了, 如果把老婆比作一个class的话, 有一种做法是会因为增加了两个新的Property而继承出两个子类: ...
- 2017.9.11 初入HTML学习
第二章 静态网页开发技术 静态网页是指可以由浏览器解释执行而生成的网页,HTML是一组标签,负责网页的基本表现形式: JavaScript是在客户端浏览器运行的语言,负责在客户端与用户的互 ...
- 【洛谷P2947】向右看齐
向右看齐 题目链接 此题可用单调栈O(n)求解 维护一个单调递减栈,元素从左到右入栈 若新加元素大于栈中元素,则栈中元素的仰望对象即为新加元素 每次将小于新加元素的栈中元素弹出,记录下答案 #incl ...
- Android学习笔记_33_Widget时钟(MetaData)
Widgets在文档docs\guide\topics\appwidgets\index.html下 Android中AppWidget的分析与应用:AppWidgetProvider 一.在 And ...
- data-ng-model 指令
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...