当前位置:网站首页>Day24: file system
Day24: file system
2022-07-04 21:15:00 【_ Doris___】
Catalog
One 、firesystem brief introduction :
1.C++17 Standard only , In fact, it's about folders 、 File directory
2.filesystem brief introduction :
4. Common methods :( notes : stay filesystem In the namespace of filesystem::)
(3) Get the time when the file was last modified
How to convert std::filesystem::file_time_type to time_t?
Two 、 Three categories path class
1. Determine whether this path exists
2. Get path related properties :
3、 ... and 、 Three categories file_status class
1. Create file_status object : utilize filesystem::status(string url)
2. Methods in class :type() Returns one of several enumeration types (filesystem::file_type Medium )
Four 、 Three categories file_status class
1. Traverse all files in the current directory
2. Traverse all files in the current folder ---> Only the current directory
3. Traverse all folder files under the current folder
4. Delete all files in the current path ( Folder not included !)
One 、firesystem brief introduction :
1.C++17 Standard only , In fact, it's about folders 、 File directory
#include<filesystem>2.filesystem brief introduction :
3. Three broad categories :
①path class ②file_status class ③directory_entry class
4. Common methods :( notes : stay filesystem In the namespace of filesystem::)
(1) establish
①create_directory(string url)
The second parameter is a error_code object , By calling error_code Medium message() Method , Whether the output is successfully created . secondly , You cannot create a parent folder and create subfolders in it ( Only single tier directories can be created )
②create_directories(string url) Can create multistage Catalog
notes : If the path already exists , It will not be cleared .
filesystem::path url("fileBox");
if (!filesystem::exists(url))
{
cout << " non-existent " << endl;
}/* Be sure to give priority to detection */
// Path storage Do nothing else
filesystem::create_directory("fileBox"); // Create a single level directory
error_code temp;
filesystem::create_directory("fileBox/xx",temp);
cout << temp.message() << endl;
filesystem::create_directories("a/b/c",temp); // Create multi-level directory
cout << temp.message() << endl;(2) Delete path
remove_all(string url)
filesystem::remove_all(url);(3) Get the time when the file was last modified
last_write_time(string url)
Return to one file_time_type type , Need further adjustment time_since_epoch() Method .count() Get the form of timestamp
Last class mainly talked about two ways : Method of converting timestamp into readable time .
①ctime(&m_tm)
②std::tm* p=localtime(&m_tm);
cout << " Format time :" << put_time(p, "%F %T") << endl;
notes : Later, through the following two lines of code to detect the data type ,count() It is not time_t type , So the above two methods are not very effective .
#include<typeinfo>
typeid(m_time).name()Start with the essence : The problem is :(from stack_overflow)
How to convert std::filesystem::file_time_type to time_t?
C++20 Of solution:
const auto fileTime = std::filesystem::last_write_time(filePath);
const auto systemTime = std::chrono::clock_cast<std::chrono::system_clock>(fileTime);
const auto time = std::chrono::system_clock::to_time_t(systemTime);So the example code is changed to :
auto filetime = filesystem::last_write_time("B");
const auto systemTime =
std::chrono::clock_cast<std::chrono::system_clock>(filetime);
const auto time = std::chrono::system_clock::to_time_t(systemTime);
std::tm* p = localtime(&time);
cout << " File change time :" << put_time(p,"%F %T") << endl;Two 、 Three categories path class
1. Determine whether this path exists
notes : It must be filesystem Scope discriminator in bool filesystem::exist(string url)
#include<iostream>
#include<filesystem>
filesystem::path url("file");
if (!filesystem::exists(url))
{
cout << " path does not exist " << endl;
}2. Get path related properties :
(i) Get the current path (ii) Get the root directory (iii) Relative paths (iv) Get root name (v) Get the root path
filesystem::path curURL = filesystem::current_path();
//C:\Users\team\Desktop\ The first 24 course C++ file system \filesystem System \path class
cout << curURL.string() << endl; // Double slash becomes single slash
cout <<" current path :" << curURL << endl; // Double slash
cout << " root directory :" << curURL.root_directory() << endl;
cout << " Relative paths :" << curURL.relative_path() << endl;
cout << " Root name :" << curURL.root_name() << endl;
cout << " The root path :" << curURL.root_path() << endl;Output :
D:\C++\C++ file system \filesystem System \path class
current path :"D:\\C++\\C++ file system \\filesystem System \\path class "
root directory :"\\"
Relative paths :"C++\\C++ file system \\filesystem System \\path class "
Root name :"D:"
The root path :"D:\\"
3、 ... and 、 Three categories file_status class
1. Create file_status object : utilize filesystem::status(string url)
2. Methods in class :type() Returns one of several enumeration types (filesystem::file_type Medium )
#include <filesystem>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void test_file_status(filesystem::file_status x)
{
switch (x.type())
{
case filesystem::file_type::regular:
cout << " Disk files " << endl;
break;
case filesystem::file_type::directory:
cout << " Directory file " << endl;
break;
case filesystem::file_type::not_found:
cout << " directory does not exist " << endl;
break;
case filesystem::file_type::unknown:
cout << " Unrecognized file " << endl;
break;
}
}
int main()
{
filesystem::create_directory("file");
filesystem::file_status x = filesystem::status("file");
test_file_status(x);
fstream file("file\\test.dat", ios::out | ios::trunc);
if (!file)
{
cout << " File creation failed !" << endl;
}
test_file_status(filesystem::status("file\\test.dat"));
return 0;
}Output :
Directory file
Disk files
Four 、 Three categories file_status class
notes : If you can't recognize filesystem It must be that the standard is not adjusted c++17 above !
directory_entry: File entry
dirctory_iterator: Traversal filerecursive_directory_iterator Traverse all ( With recursive traversal of all folders !!!)
1. Traverse all files in the current directory
// Traverse all files in the current directory :
void traverseDirectory()
{
filesystem::path url("D:\\BaiduNetdiskDownload");
if (!filesystem::exists(url))
{
cout << " The current path does not exist " << endl;
return;
}
filesystem::directory_entry input(url);// entrance
if (input.status().type() != filesystem::file_type::directory)
{
cout << "url Not a directory " << endl;
return;
}
filesystem::directory_iterator dir(url);
for (auto v : dir)
{/*path Is a path object */
cout << v.path().filename() << endl;
}
}2. Traverse all files in the current folder ---> Only the current directory
// Traverse all files in the current folder ---> Only the current directory
void traverseDirectoryAllFile()
{
filesystem::path url("D:\\BaiduNetdiskDownload");
if (!filesystem::exists(url))
{
cout << " The current path does not exist " << endl;
return;
}
set<string> dirset;
filesystem::directory_iterator begin(url);
for (filesystem::directory_iterator end; begin != end; ++begin)
{
if (!filesystem::is_directory(begin->path()))
{
dirset.insert(begin->path().filename().string());
}
}
for (auto v : dirset)
{
cout << v << endl;
}
}3. Traverse all folder files under the current folder
recursive_directory_iterator Traverse all ( With recursive traversal of all folders !!!)
// Traverse all folder files under the current folder
void traverseAllDirectoryAllFile()
{
filesystem::path url("D:\\BaiduNetdiskDownload");
if (!filesystem::exists(url))
{
cout << " The current path does not exist " << endl;
return;
}
set<string> dirset;
//recursive_directory_iterator Traverse all ( With recursive traversal of all folders !!!)
filesystem::recursive_directory_iterator begin(url);
for (filesystem::recursive_directory_iterator end; begin != end; ++begin)
{
if (!filesystem::is_directory(begin->path()))
{
dirset.insert(begin->path().filename().string());
}
}
for (auto v : dirset)
{
cout << v << endl;
}
}4. Delete all files in the current path ( Folder not included !)
// Delete all files in the current path ( Folder not included !)
void deleteURLAllFile()
{
filesystem::path root = filesystem::current_path();
set<string> dirset;
for (filesystem::directory_iterator end, begin(root); begin != end; ++begin)
{
if (!filesystem::is_directory(begin->path()))/* Exclude folders */
{
dirset.insert(begin->path().filename().string());
}
}
for (auto v : dirset)
{
if(v!="test.exe")/* The program cannot put itself .exe Delete the file , So we need to rule out */
filesystem::remove_all(v); // heavy load /
}
}边栏推荐
- ApplicationContext 与 BeanFactory 区别(MS)
- admas零件名重复
- 杰理之AD 系列 MIDI 功能说明【篇】
- 伦敦银走势图分析的新方法
- In the face of the same complex test task, why can the elder sort out the solution quickly? Ali's ten-year test engineers showed their skills
- heatmap.js图片热点热力图插件
- 杰理之AD 系列 MIDI 功能说明【篇】
- 2021 CCPC 哈尔滨 I. Power and Zero(二进制 + 思维)
- Go notes (3) usage of go language FMT package
- 华为模拟器ensp的路由配置以及连通测试
猜你喜欢

Configuration of DNS server of Huawei ENSP simulator

colResizable.js自动调整表格宽度插件

LeetCode+ 81 - 85 单调栈专题

From automation to digital twins, what can Tupo do?

Golang中UTF编码和字符集

Hwinfo hardware detection tool v7.26 green version

Detailed explanation of multi-mode input event distribution mechanism
![[1200. Minimum absolute difference]](/img/fa/4ffbedd8f24c75a20d3eaeaf0430ae.png)
[1200. Minimum absolute difference]

RFID仓库管理系统解决方案有哪些功能模块

PS vertical English and digital text how to change direction (vertical display)
随机推荐
[server data recovery] a case of RAID5 data recovery stored in a brand of server
华为模拟器ensp的路由配置以及连通测试
【微服务|SCG】Predicate的使用
JS closure
多模輸入事件分發機制詳解
MySQL - database query - use of aggregate function, aggregate query, grouping query
VIM asynchronous problem
测试用例 (TC)
Jekins initialization password not found or not found
华为ensp模拟器 给路由器配置DHCP
2021 CCPC 哈尔滨 B. Magical Subsequence(思维题)
[1200. Minimum absolute difference]
Browser render page pass
MySQL statement execution details
UTF encoding and character set in golang
JS卡牌样式倒计时天数
WinCC7.5 SP1如何通过交叉索引来寻找变量及其位置?
网件r7000梅林系统虚拟内存创建失败,提示USB磁盘读写速度不满足要求解决办法,有需要创建虚拟内存吗??
Redis:Redis配置文件相关配置、Redis的持久化
华为ensp模拟器 DNS服务器的配置
https://docs.microsoft.com/zh-cn/cpp/standard-library/filesystem-functions?view=msvc-170#copy_file