当前位置: 首页 > news >正文

C++17中std::filesystem::directory_entry的使用

      C++17引入了std::filesystem库(文件系统库, filesystem library)。这里整理下std::filesystem::directory_entry的使用。
      std::filesystem::directory_entry,目录项,获取文件属性。此directory_entry类主要用法包括:
      (1).构造函数、operator=、assign:赋值;
      (2).replace_filename: 更改目录项的文件名;
      (3).path: 返回std::filesystem::path对象;
      (4).exists: 检查指定的目录项是否存在
      (5).is_block_file、is_character_file: 检查目录项是否是块设备(block device)、字符设备(character device);
      (6).is_directory: 检查目录项是否是目录;
      (7).is_fifo: 检查目录项是否是命令管道;
      (8).is_other: 检查目录项是否是其它文件(不是常规文件、目录或符号链接);
      (9).is_regular_file: 检查目录项是否是常规文件;
      (10).is_socket: 检查目录项是否是命名套接字;
      (11).is_symlink: 检查目录项是否是符号链接;
      (12).file_size: 获取目录项指定的文件大小
      (13).last_write_time:获取目录项最后修改时间

      以下为测试代码:注意windows和linux结果输出的差异

namespace {float get_file_size(std::uintmax_t size, std::string& suffix)
{float s1 = size / 1024. / 1024 / 1024;float s2 = size / 1024. / 1024;float s3 = size / 1024.;if (s1 > 1) {suffix = " GB";return s1;}if (s2 > 1) {suffix = " MB";return s2;}if (s3 > 1) {suffix = " KB";return s3;}suffix = " Bytes";return size;
}std::string to_time_t(std::filesystem::file_time_type tp)
{using namespace std::chrono;auto sctp = time_point_cast<system_clock::duration>(tp - std::filesystem::file_time_type::clock::now() + system_clock::now());auto tt = system_clock::to_time_t(sctp);std::tm* gmt = std::localtime(&tt); // UTC: std::gmtime(&tt);std::stringstream buffer;buffer << std::put_time(gmt, "%Y-%m-%d %H:%M:%S");return buffer.str();
}} // namespaceint test_filesystem_directory_entry()
{namespace fs = std::filesystem;// 1. construct,operator=,assignfs::directory_entry d1{ fs::current_path() };fs::directory_entry d2 = d1;fs::directory_entry d3;d3.assign(fs::current_path());if ((d1 == d2) && (d1 == d3))std::cout << "they are equal" << std::endl; // they are equal// windows: d1:"E:\\GitCode\\Messy_Test\\prj\\x86_x64_vc12\\CppBaseTest"// linux: d1:"/home/spring/GitCode/Messy_Test/prj/linux_cmake_CppBaseTest"std::cout << "d1:" << d1 << std::endl;// 2. replace_filenamed1.replace_filename("C++17Test");// windows: d1:"E:\\GitCode\\Messy_Test\\prj\\x86_x64_vc12\\C++17Test"// linux: d1:"/home/spring/GitCode/Messy_Test/prj/C++17Test"std::cout << "d1:" << d1 << std::endl;// 3. pathfs::path p1 = d1.path();// windows: p1:"E:\\GitCode\\Messy_Test\\prj\\x86_x64_vc12\\C++17Test"// linux: p1:"/home/spring/GitCode/Messy_Test/prj/C++17Test"std::cout << "p1:" << p1 << std::endl;// 4. existsfor (const auto& str : { "C:\\Program Files (x86)", "/usr/local" , "E:\\GitCode\\xxx", "/usr/xxx"}) {fs::directory_entry entry{ str };/* windows:directory entry: "C:\\Program Files (x86)":existsdirectory entry: "/usr/local":does not existdirectory entry: "E:\\GitCode\\xxx":does not existdirectory entry: "/usr/xxx":does not exist *//* linux:directory entry: "C:\\Program Files (x86)":does not existdirectory entry: "/usr/local":existsdirectory entry: "E:\\GitCode\\xxx":does not existdirectory entry: "/usr/xxx":does not exist*/std::cout << "directory entry: " << entry << (entry.exists() ? ":exists\n" : ":does not exist\n");}// 5. is_block_file,is_character_file,is_directory,is_fifo,is_other,is_regular_file,is_socket,is_symlinkfor (const auto& str : { "/dev/null", "C:\\Program Files (x86)", "/usr/include/time.h", "C:\\MinGW\\bin\\c++filt.exe","/usr/bin/g++", "/dev/block/11:0"}) {fs::directory_entry entry{ str };/* windows:"C:\\Program Files (x86)" is a directory"C:\\MinGW\\bin\\c++filt.exe" is a regular_file *//* linux:"/dev/null" is a character device"/dev/null" is an other file"/usr/include/time.h" is a regular_file"/usr/bin/g++" is a regular_file"/usr/bin/g++" is a symlink"/dev/block/11:0" is a block device"/dev/block/11:0" is an other file"/dev/block/11:0" is a symlink */if (entry.is_block_file())std::cout << entry << " is a block device" << std::endl;if (entry.is_character_file())std::cout << entry << " is a character device" << std::endl;if (entry.is_directory())std::cout << entry << " is a directory" << std::endl;if (entry.is_fifo())std::cout << entry << " is a FIFO" << std::endl;if (entry.is_other())std::cout << entry << " is an other file" << std::endl;if (entry.is_regular_file())std::cout << entry << " is a regular_file" << std::endl;if (entry.is_socket())std::cout << entry << " is a named socket" << std::endl;if (entry.is_symlink())std::cout << entry << " is a symlink" << std::endl;}// 6. file_size, last_write_timefor (const auto& str : { "/usr/bin/g++", "D:\\FSCapture.exe", "D:\\DownLoad\\tmp.txt", "/usr/bin/cmake", "E:\\yulong.mp4"}) {fs::directory_entry entry{ str };/* windows:"D:\\FSCapture.exe" size: 2.82 MB"D:\\FSCapture.exe" last write time: 2016-03-29 09:26:26"D:\\DownLoad\\tmp.txt" size: 10 Bytes"D:\\DownLoad\\tmp.txt" last write time: 2023-09-26 09:00:35"E:\\yulong.mp4" size: 1.35 GB"E:\\yulong.mp4" last write time: 2023-08-19 22:42:56 *//* linux:"/usr/bin/g++" size: 910.82 KB"/usr/bin/g++" last write time: 2023-05-13 15:52:47"/usr/bin/cmake" size: 6.43 MB"/usr/bin/cmake" last write time: 2022-08-17 18:44:05 */if (entry.is_regular_file()) {std::string suffix;auto value = get_file_size(entry.file_size(), suffix);if (suffix == " Bytes")std::cout << entry << " size: " << static_cast<int>(value) << suffix << std::endl;elsestd::cout << entry << " size: " << std::fixed << std::setprecision(2) << value << suffix << std::endl;std::cout << entry << " last write time: " << to_time_t(entry.last_write_time()) << std::endl;}}return 0;
}

      执行结果如下图所示:

      GitHub:https://github.com/fengbingchun/Messy_Test

相关文章:

C++17中std::filesystem::directory_entry的使用

C17引入了std::filesystem库(文件系统库, filesystem library)。这里整理下std::filesystem::directory_entry的使用。 std::filesystem::directory_entry&#xff0c;目录项&#xff0c;获取文件属性。此directory_entry类主要用法包括&#xff1a; (1).构造函数、…...

C/C++跨平台构建工具CMake入门

文章目录 1.概述2.环境准备2.1 安装编译工具2.2 安装CMake 3.编译一个示例程序总结 1.概述 本人一直对OpenGL的3d渲染很感兴趣&#xff0c;但是苦于自己一直是Android开发&#xff0c;没有机会接触这方面的知识。就在最近吗&#xff0c;机会来了&#xff0c;以前一个做3D渲染的…...

【CFD小工坊】浅水方程的离散及求解方法

【CFD小工坊】浅水方程的离散及求解方法 前言基于有限体积法的方程离散界面通量与源项计算干-湿网格的处理数值离散的稳定性条件参考文献 前言 我们模型的控制方程&#xff0c;即浅水方程组的表达式如下&#xff1a; ∂ U ∂ t ∂ E ( U ) ∂ x ∂ G ( U ) ∂ y S ( U ) U…...

第十四章 类和对象——C++对象模型和this指针

一、成员变量和成员函数分开存储 在C中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 class Person {public:Person() {mA 0;}//非静态成员变量占对象空间int mA;//静态成员变量不占对象空间static int mB; //函数也不占对象空间&#…...

计算机竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐…...

java web+Mysql e-life智能生活小区物业管理系统

本项目为本人自己书写&#xff0c;主要服务小区业主和管理人员。 e-life智能生活小区涉及多个方面的智能化和便利化服务&#xff1a; 1. 用户模块&#xff1a;包含基本的登入登出操作&#xff0c;查看个人信息中用户可以查看 自己的个人资料但不可以修改个人信息。 a) 用户…...

AttributeError: module ‘dgl‘ has no attribute ‘batch_hetero‘

DGLWarning: From v0.5, DGLHeteroGraph is merged into DGLGraph. You can safely replace dgl.batch_hetero with dgl.batch...

Vue项目搭建图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 预备工作 请在本地创建文件夹用于存放Vue项目&#xff0c;例如&#xff1a;创建HelloWorld文件夹存放即将创建的Vue新项目。 创建Vue项目 首先&#xff0c;请在DOS中将目录…...

SpringMVC处理请求核心流程

一、前言 SpringMVC是一个基于Java的Web框架&#xff0c;它使用MVC&#xff08;Model-View-Controller&#xff09;设计模式来处理Web请求。在SpringMVC中&#xff0c;请求处理的核心流程主要包括以下几个步骤&#xff1a; 1、用户发送请求到前端控制器&#xff08;Dispatche…...

SoloX:Android和iOS性能数据的实时采集工具

SoloX&#xff1a;Android和iOS性能数据的实时采集工具 github地址&#xff1a;https://github.com/smart-test-ti/SoloX 最新版本&#xff1a;V2.7.6 一、SoloX简介 SoloX是开源的Android/iOS性能数据的实时采集工具&#xff0c;目前主要功能特点&#xff1a; 无需ROOT/越狱…...

【知识点随笔分析 | 第五篇】简单介绍什么是QUIC

前言&#xff1a; 随着互联网的快速发展&#xff0c;传统的基于TCP的协议开始显现出一些局限性。TCP在连接建立和拥塞控制方面存在一定的延迟&#xff0c;这可能导致用户在访问网页、观看视频或玩网络游戏时感受到不必要的等待时间。而QUIC作为一种新兴的传输协议&#xff0c;试…...

vscode ssh 远程免密登录开发

存放代码的机器运行 sshd, vscode 所在机器保证可以通过 ssh 登录服务器vscode 机器通过 ssh-keygen 生成 ssh 公私钥对(已有可以忽略)将客户端的 id_rsa.pub 加入到服务器的鉴权队列 cat id_rsa.pub >> authorized_keysvscode 配置ssh登录即可.ctrlp, remote-ssh: open …...

辅助驾驶功能开发-测试篇(2)-真值系统介绍

1 真值系统概述 1.1 真值评测系统核心应用 快速构建有效感知真值,快速完成感知性能评估,快速分析感知性能缺陷。 主要应用场景包括: 1. 感知算法开发验证: 在算法开发周期中,评测结果可以作为测试报告的一部分,体现算法性能的提升。 2. 遴选供应…...

运行程序时msvcr110.dll丢失的解决方法,msvcr110.dll丢失5的个详细解决方法

在使用电脑的过程中&#xff0c;我们经常会遇到各种问题&#xff0c;其中之一就是 msvcr110.dll 丢失的问题。msvcr110.dll 是 Microsoft Visual C Redistributable 的一个组件&#xff0c;用于支持使用 Visual C 编写的应用程序。如果您的系统中丢失了这个文件&#xff0c;您可…...

已解决 Bug——IndexError: index 3 is out of bounds for axis 0 with size 3问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…...

WEB3 solidity 带着大家编写测试代码 操作订单 创建/取消/填充操作

好 在我们的不懈努力之下 交易所中的三种订单函数已经写出来了 但是 我们只是编译 确认了 代码没什么问题 但还没有实际的测试过 这个测试做起来 其实就比较的麻烦了 首先要有两个账号 且他们都要在交易所中有存入 我们还是先将 ganache 的虚拟环境启动起来 然后 我们在项目…...

c++-vector

文章目录 前言一、vector介绍二、vector使用1、构造函数2、vector 元素访问3、vector iterator 的使用4、vector 空间增长问题5、vector 增删查改6、理解vector<vector< int >>7、电话号码的字母组合练习题 三、模拟实现vector1、查看STL库源码中怎样实现的vector2…...

十四天学会C++之第二天(函数和库)

1. 函数的定义和调用 在C中&#xff0c;函数是组织和结构化代码的关键工具之一。它们允许您将一段代码封装成一个可重复使用的模块&#xff0c;这有助于提高代码的可读性和维护性。 为什么使用函数&#xff1f; 函数在编程中的作用不可小觑。它们有以下几个重要用途&#xf…...

蓝桥杯每日一题2023.10.3

杨辉三角形 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 40分写法&#xff1a; 可以自己手动构造一个杨辉三角&#xff0c;然后进行循环&#xff0c;用cnt记录下循环数的个数&#xff0c;看哪个数与要找的数一样&#xff0c;输出cnt #include<bits/stdc.h> using na…...

JavaScript系列从入门到精通系列第十二篇:JavaScript中对象的简介和对象的基本操作以及JavaScript中的属性值和属性名

文章目录 前言 一&#xff1a;对象分类 1&#xff1a;内建对象 2&#xff1a;宿主对象 3&#xff1a;自建对象 二&#xff1a;对象的基本操作 1&#xff1a;创建对象 2&#xff1a;向对象中添加属性 3&#xff1a;读取对象中的属性 4&#xff1a;修改对象中的属性 三…...

OpenCV实现视频的追踪(meanshift、Camshift)

目录 1&#xff0c;meanshift 1.1 算法流程 1.2 算法实现 1.3 代码实现 1.4 结果展示 1&#xff0c;meanshift 1.1 算法流程 1.2 算法实现 1.3 代码实现 import numpy as np import cv2 as cv# 读取视频 cap cv.VideoCapture(video.mp4)# 检查视频是否成功打开 if n…...

并查集详解(原理+代码实现+应用)

文章目录 1. 并查集概念2. 并查集原理2.1 合并2.1 找根 3. 并查集实现3.1 结构定义3.2 FindRoot&#xff08;找根&#xff09;3.3 Union&#xff08;合并&#xff09;3.4 IsInSet&#xff08;判断两个值是否在一个集合里&#xff09;3.5 SetCount&#xff08;并查集中集合个数&…...

第k小的数

补充习题: 第k小的数 问题描述 有两个正整数数列,元素个数分别为 N N N和 M M M.从两个数列中分别任取一个数相乘,这样一共可以得到 N M N\times M NM个数,询问这 N M N\times M NM个数中第 K K K小的数是多少. 数据范围: N , M < 200000 , K < 2.1 ∗ 1 0 10 , …...

基于electron25+vite4创建多窗口|vue3+electron25新开模态窗体

在写这篇文章的时候&#xff0c;查看了下electron最新稳定版本由几天前24.4.0升级到了25了&#xff0c;不得不说electron团队迭代速度之快&#xff01; 前几天有分享一篇electron24整合vite4全家桶技术构建桌面端vue3应用示例程序。 https://www.cnblogs.com/xiaoyan2017/p/17…...

红米手机 导出 通讯录 到电脑保存

不要搞什么 云服务 不要安装什么 手机助手 不要安装 什么app 用 usb 线 连接 手机 和 电脑 手机上会跳出 提示 选择 仅传输文件 会出现下面的 一个 盘 进入 MIUI目录 然后进入 此电脑\Redmi Note 5\内部存储设备\MIUI\backup\AllBackup\20230927_043337 如何没有上面的文件&a…...

常见web信息泄露

一、源码(备份文件)泄露 1、git泄露 Git是一个开源的分布式版本控制系统&#xff0c;在执行git init初始化目录的时候&#xff0c;会在当前目录下自动创建一个.git目录&#xff0c;用来记录代码的变更记录等。发布代码的时候&#xff0c;如果没有把.git这个目录删除&#xff…...

找不到VCRUNTIME140_1.dll怎么办,VCRUNTIME140_1.dll丢失的5个解决方法

在当今的数字时代&#xff0c;我们的生活和工作都离不开电脑。然而&#xff0c;随着科技的发展&#xff0c;我们也会遇到各种各样的问题。其中&#xff0c;VCRUNTIME140_1.dll丢失的问题是许多人都会遇到的困扰。这个问题可能会导致许多应用程序无法正常运行&#xff0c;给我们…...

C#生成自定义海报

安装包 SixLabors.ImageSharp.Drawing 2.0 需要的字体&#xff1a;宋体和微软雅黑 商用的需要授权如果商业使用可以使用方正书宋、方正黑体&#xff0c;他们可以免费商用 方正官网 代码 using SixLabors.Fonts; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Draw…...

BP神经网络的MATLAB实现(含源代码)

BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念&#xff0c;是一种按照误差逆向传播算法训练的多层前馈神经网络&#xff0c;是应用最广泛的神经网络模型之一 具体数学推导以及原理在本文不做详细介绍&#xff0c;本文将使用MATLAB进行B…...

AES和Rijndael的区别

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:密码学实践强化训练–【目录】 👈👈👈“Rijndael” 这个词的中文谐音可以近似地发音为 “瑞恩达尔”。请注意,这只是一种近似的发音方式,因为该词是荷兰姓氏 “Ri…...

现在建网站还能赚钱吗/万能导航网

2019独角兽企业重金招聘Python工程师标准>>> 高性价比深度学习神器&#xff01;阿里云GPU实例V100 最深度评测 在 GTC 2017 大会上&#xff0c;NVIDIA 的 CEO 黄仁勋正式发布了其新一代旗舰计算卡 Tesla V100&#xff0c;但是一项技术从发布到真正使用到生产环境中&…...

简洁高端的wordpress个人博客/网站的推广平台有哪些

2019独角兽企业重金招聘Python工程师标准>>> 1、语法&#xff1a;Java程序员必须比较熟悉语法&#xff0c;在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息 知道是什么样的语法错误并且知道任何修正。 2、命令&#xff1a;必须熟悉JDK带的一些常用命令…...

河北中凯建设有限公司网站/学电脑培训班多少一个月

// 请注明出处&#xff1a;http://blog.csdn.net/BonChoix&#xff0c;谢谢~&#xff09; 切线空间&#xff08;Tangent Space&#xff09; 切换空间&#xff0c;同局部空间、世界空间等一样&#xff0c;是3D图形学中众多的坐标系之一。切换空间最重要的用途之一&#xff0c;即…...

养老院网站建设的好处/怎么优化网站排名才能起来

一次在项目中服务器端返回的订阅时间是分钟为单位&#xff0c;而客户端显示的格式要求必须是&#xff1a;时-分-秒 自己想了想&#xff0c;写了一个函数&#xff1a; public static String remainTimeStr(int minutes){ int hour minutes/60; int minute minut…...

wordpress可以干啥/哪些平台可以免费打广告

为什么80%的码农都做不了架构师&#xff1f;>>> nm -a libboost.a |grep generic_category 输入指令 lipo -info xxx.framework/xxxxFramework 查看.a文件直接 lipo -info xxx.a 转载于:https://my.oschina.net/polarw/blog/2413835...

广州迅优网站建设公司怎么样/惠州百度seo地址

继续前面的两篇文章的动态脚本语言主题《.NET 动态脚本语言Script.NET 入门指南 Quick Start》和《.NET 动态脚本语言Script.NET 开发指南》&#xff0c;继续学习Script.NET的应用。 类型定义 type definition Script.NET不是OOP的语言&#xff0c;但可以借助于属性(property b…...