一般程序设计都有访问文件系统的需求,什么列出目录啦,删除,创建目录啦,自己写老费劲了,又要考虑跨平台实现,费心伤神。

c++17把这个给统一了,加了个filesystem,但是对于不想用或不能用c++17的人就麻烦了。

这里有个轮子可以拿去用,基于c++11实现,与c++17兼容。非常好用。

项目地址: https://github.com/gulrak/filesystem/

使用示例:

参见https://github.com/gulrak/filesystem/blob/master/examples/

需要注意的是,遍历目录的时候,如果不进行递归遍历,需要使用fs::directory_iterator 。

代码内不带获取可执行文件路径的函数,可以看我前面的文章。https://blog.csdn.net/v6543210/article/details/107663161

#include <iostream>
#include <iomanip>
#include <chrono>#if defined(__cplusplus) && __cplusplus >= 201703L && defined(__has_include)
#if __has_include(<filesystem>)
#define GHC_USE_STD_FS
#include <filesystem>
namespace fs = std::filesystem;
#endif
#endif
#ifndef GHC_USE_STD_FS
#include <ghc/filesystem.hpp>
namespace fs = ghc::filesystem;
#endifint main(int argc, char* argv[])
{
#ifdef GHC_FILESYSTEM_VERSIONfs::u8arguments u8guard(argc, argv);if(!u8guard.valid()) {std::cerr << "Invalid character encoding, UTF-8 based encoding needed." << std::endl;std::exit(EXIT_FAILURE);}
#endifif(argc > 2) {std::cerr << "USAGE: du <path>" << std::endl;exit(1);}fs::path dir{"."};if(argc == 2) {dir = fs::u8path(argv[1]);}uint64_t totalSize = 0;int totalDirs = 0;int totalFiles = 0;int maxDepth = 0;try {auto rdi = fs::recursive_directory_iterator(dir);for(auto de : rdi) {if(rdi.depth() > maxDepth) {maxDepth = rdi.depth();}if(de.is_regular_file()) {totalSize += de.file_size();++totalFiles;}else if(de.is_directory()) {++totalDirs;}}}catch(fs::filesystem_error fe) {std::cerr << "Error: " << fe.what() << std::endl;exit(1);}std::cout << totalSize << " bytes in " << totalFiles << " files and " << totalDirs << " directories, maximum depth: " << maxDepth << std::endl;return 0;
}

基于c++11 的filesystem库相关推荐

  1. 你可能没听过的11个Python库,你有认识的吗?

    目前,网上已有成千上万个Python包,但几乎没有人能够全部知道它们.单单PyPi上就有超过47000个包列表. 现在,越来越多的数据科学家开始使用Python,虽然他们从pandas,scikit- ...

  2. 学习C++项目——一个基于C++11简单易用的轻量级网络编程框架 1

    一个基于C++11简单易用的轻量级网络编程框架 一.项目下载.导入.编译和运行   现在准备深入学习 C++ ,先肝一个项目,这个项目是<一个基于C++11简单易用的轻量级网络编程框架>, ...

  3. 你可能没听过的11个Python库

    目前,网上已有成千上万个Python包,但几乎没有人能够全部知道它们.单单 PyPi上就有超过47000个包列表. 现在,越来越多的数据科学家开始使用Python,虽然他们从 pandas, scik ...

  4. 基于https搭建habor私有库

    基于https搭建habor私有库 1.编辑/etc/docker/daemon.json文件,如果文件不存在,则新建该文件,在该文件中加入:"insecure-registries&quo ...

  5. 基于FFMPEG水印添加---avfilter库

    基于FFMPEG水印添加-avfilter库   avfilter,是ffmpeg为图像和语音处理提供的滤镜子框架,代码位于libavfilter目录.   libavfilter提供了一个通用框架来 ...

  6. 基于JUPYTER的python主流库新手教程(上)

    基于JUPYTER的python主流库新手教程(上) 作者:二马传奇 0. 基本测试 for i in range(5):print(i,end=",") 0,1,2,3,4, 1 ...

  7. 基于腾讯 x5 开源库,提高 webView 开发效率,大概要节约你百分之六十的时间成本。该案例支持处理 js 的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异常 error 状态、支持视频播放

    YCWebView 项目地址:yangchong211/YCWebView 简介: 基于腾讯 x5 开源库,提高 webView 开发效率,大概要节约你百分之六十的时间成本.该案例支持处理 js 的交 ...

  8. 基于腾讯x5开源库,提高webView开发效率

    基于腾讯x5开源库,提高webView开发效率 文章目录 基于腾讯x5开源库,提高webView开发效率 01.前沿说明 1.1 案例展示效果 1.2 该库功能和优势 1.3 相关类介绍说明 02.如 ...

  9. Arduino UNO基于Timer2的舵机驱动库(精度比官方的高)

    Arduino UNO基于Timer2的舵机驱动库(精度比官方的高) 原博客格式更友好:More accurate Arduino UNO timer2 servo driver library th ...

最新文章

  1. 深入实践Spring Boot1.3.2 一个简单的实例
  2. 移动网站开发中常用的10段JavaScript代码
  3. mysql 字符串解析_MySQL 动态字符串处理详解
  4. 蚂蚁集团董事调整:黄益平等五人新增,彭蕾等三人退出
  5. 多线程环境下调用 HttpWebRequest 并发连接限制
  6. 恋爱记v1.0源码-在线生成表白页
  7. 年轻人原地过年,也不忘搞钱
  8. Android设置透明效果的三种方法(转)
  9. [220221] Majority Element
  10. 微软新一代企业应用平台 促进动态IT发展
  11. win10系统steam登陆计算机授权,steam登陆授权
  12. 使用matplotlib画对数函数图像
  13. Frogs' Neighborhood
  14. 双路cpu比单路强多少_别傻了!双核和双路服务器根本不一样
  15. 120G+训练好的word2vec模型(中文词向量)
  16. 物联网与大数据(三)从大数据看物联网
  17. littlevgl教程 Linux,树莓派littlevGL系列教程:容器控件(lv_cont)
  18. ArcGIS教程 - 10 栅格数据分析
  19. Edge浏览器无法登录同步共享问题
  20. C#将jpg格式图片合成到bmp格式图片中

热门文章

  1. 愿面朝大海,春暖花开
  2. MACOM EDI 需求分析
  3. 家里WIFI连接上了但是无法上网的问题解决方案
  4. mllib调参 spark_Spark入门:MLlib基本数据类型(1)
  5. 操作系统校招面试复习知识详述
  6. [AppDelegate window]: unrecognized selector sent to instance 0x600002b178e0
  7. CS 寄存器 和 IP 寄存器
  8. 【Linux】ntpdate和chrony的区别与应用
  9. Windows 10的中文用户名怎么改成英文?
  10. 国内智能汽车芯片政策利好不断,华为已推出L4级无人驾驶芯片!