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

标准库标头 <filesystem> (C++17)学习之文件类型

本篇介绍filesystem文件库的文件类型API。

文件类型

is_block_file

(C++17)

检查给定的路径是否表示块设备
(函数)

is_character_file

(C++17)

检查给定的路径是否表示字符设备
(函数)

is_directory

(C++17)

检查给定的路径是否表示一个目录
(函数)

is_empty

(C++17)

检查给定的路径是否表示一个空文件或空目录
(函数)

is_fifo

(C++17)

检查给定的路径是否表示一个命名管道
(函数)

is_other

(C++17)

检查参数是否表示一个其他文件
(函数)

is_regular_file

(C++17)

检查参数是否表示一个常规文件
(函数)

is_socket

(C++17)

检查参数是否表示一个具名 IPC 套接字
(函数)

is_symlink

(C++17)

检查参数是否表示一个符号链接
(函数)

status_known

(C++17)

检查文件状态是否已知
(函数)

 示例代码:

#include <cstdio>
#include <cstring>
#include <filesystem>
#include <fstream>
#include <iostream>
#include <sys/stat.h>namespace fs = std::filesystem;void demo_status(const fs::path& p, fs::file_status s)
{std::cout << p;// 也可以用: switch(s.type()) { case fs::file_type::regular: ...}if (fs::is_regular_file(s))std::cout << " 是常规文件\n";if (fs::is_directory(s))std::cout << " 是目录\n";if (fs::is_block_file(s))std::cout << " 是块设备\n";if (fs::is_character_file(s))std::cout << " 是字符设备\n";if (fs::is_fifo(s))std::cout << " 是具名 IPC 管道\n";if (fs::is_socket(s))std::cout << " 是具名 IPC 套接字\n";if (fs::is_symlink(s))std::cout << " 是符号链接\n";if (!fs::exists(s))std::cout << " 不存在\n";
}int main()
{// 创建不同种类的文件fs::create_directory("sandbox");fs::create_directory("sandbox/dir");std::ofstream("sandbox/file"); // 创建常规文件//fs::create_symlink("file", "sandbox/symlink");demo_status("sandbox", fs::status("sandbox")); // 直接调用 statusdemo_status("sandbox/dir", fs::status("sandbox/dir"));demo_status("sandbox/file", fs::status("sandbox/file"));fs::remove_all("sandbox");return 0;
}

运行结果:

Linux系统示例代码:

#include <cstdio>
#include <cstring>
#include <filesystem>
#include <fstream>
#include <iostream>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
#include <unistd.h>namespace fs = std::filesystem;void demo_status(const fs::path& p, fs::file_status s)
{std::cout << p;// 也可以用: switch(s.type()) { case fs::file_type::regular: ...}if (fs::is_regular_file(s))std::cout << " 是常规文件\n";if (fs::is_directory(s))std::cout << " 是目录\n";if (fs::is_block_file(s))std::cout << " 是块设备\n";if (fs::is_character_file(s))std::cout << " 是字符设备\n";if (fs::is_fifo(s))std::cout << " 是具名 IPC 管道\n";if (fs::is_socket(s))std::cout << " 是具名 IPC 套接字\n";if (fs::is_symlink(s))std::cout << " 是符号链接\n";if (!fs::exists(s))std::cout << " 不存在\n";
}int main()
{// 创建不同种类的文件fs::create_directory("sandbox");fs::create_directory("sandbox/dir");std::ofstream("sandbox/file"); // 创建常规文件fs::create_symlink("file", "sandbox/symlink");mkfifo("sandbox/pipe", 0644);sockaddr_un addr;addr.sun_family = AF_UNIX;std::strcpy(addr.sun_path, "sandbox/sock");int fd = socket(PF_UNIX, SOCK_STREAM, 0);bind(fd, reinterpret_cast<sockaddr*>(&addr), sizeof addr);// 演示不同的状态访问器for (auto it{fs::directory_iterator("sandbox")}; it != fs::directory_iterator(); ++it)demo_status(*it, it->symlink_status()); // 使用 directory_entry 缓存的状态demo_status("/dev/null", fs::status("/dev/null")); // 直接调用 statusdemo_status("/dev/sda", fs::status("/dev/sda"));demo_status("sandbox/no", fs::status("/sandbox/no"));// 清理(推荐采用基于 std::unique_ptr 的自定义删除器)close(fd);fs::remove_all("sandbox");
}

可能的输出:

参考:

https://zh.cppreference.com/w/cpp/header/filesystem

http://www.lryc.cn/news/433407.html

相关文章:

  • 基于51单片机的自动转向修复系统的设计与实现
  • mysql笔记4(数据类型)
  • 电脑开机出现no operation system found错误原因分析及解决方法
  • 数学建模笔记—— 主成分分析(PCA)
  • @vueup/vue-quill使用quill-better-table报moduleClass is not a constructor
  • gpp.bat,g++编译C++源文件的批处理
  • JDBC:连接数据库
  • 【赵渝强老师】大数据主从架构的单点故障
  • 【AutoX.js】选择器 UiSelector
  • Elasticsearch数据写入过程
  • FreeRTOS-基本介绍和移植STM32
  • 在C++中,如何避免出现Bug?
  • Linux 操作系统 进程(1)
  • clickhouse-v24.1-离线部署
  • 安卓13删除app 链接库警告弹窗Detected problems with app native
  • 第四次北漂----挣个独立游戏的素材钱
  • 漫谈设计模式 [12]:模板方法模式
  • CSS学习10[重点]--浮动、浮动的效果以及内幕特性
  • matlab基本语法
  • 【Leetcode152】乘积最大子数组(动态规划)
  • STM32(十二):DMA直接存储器存取
  • 关于我2020年7月至今(2024.9)的“炒股”经历和感受
  • 【Tools】Prompt Engineering简介
  • 多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信
  • 乐鑫安全制造全流程
  • 〖open-mmlab: MMDetection〗解析文件:configs/_base_/schedules
  • Android之Handler是如何保证延迟发送的
  • 定位信标、基站、标签,定位信标是什么
  • 2024国赛数学建模B题完整分析参考论文38页(含模型和可运行代码)
  • Hive是什么?