IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 查找指定目录下的文件数 -> 正文阅读

[C++知识库]C++ 查找指定目录下的文件数

C++ 查找指定目录下的文件数

代码

#include<iostream>
using namespace std;
#include <filesystem>
#include <string>
using namespace std::filesystem;

// 注意这个函数也会统计隐藏文件
int getFileNumber(string folderPath) {
    if (!exists(folderPath))		// 如果目录不存在
        return 0;
    path root(folderPath);
    //如果路径不是目录也不是文件 
    if (!is_directory(root) && is_regular_file(root)) {
        return 0;
    }
    // 如果只是单个文件,返回1
    if (is_regular_file(root)) {
        return 1;
    }
    // DFS
    stack<path> st;
    st.push(root);
    int files = 0;
    while (!st.empty()) {
        path folder = st.top();
        st.pop();
        directory_entry entry(folder);	//文件入口
        directory_iterator list(entry);	//文件入口容器
        for (auto& it : list) {
            if (is_regular_file(it)) {	//文件的话,文件数++
                ++files;
            }
            if (is_directory(it)) {	//目录的话,入栈
                st.push(it);
            }
        }
    }
    return files;
}

int main()
{
    // 使用时传入指定目录字符串即可
    // 示例:查找E盘下test目录下的文件数,注意字符串结尾需加"\\"表示该路径是个目录形式
    cout<<getFileNumber("E:\\test\\");
    return 0;
}

C++ 17 filesystem

借此浅学一下C++17 filesystem的文件管理操作

头文件及其命名空间

#include<filesystem>
using namespace std::filesystem;

常用类

  • path 类:说白了该类只是对字符串(路径)进行一些处理,这也是文件系统的基石。
  • directory_entry 类:功如其名,文件入口,这个类才真正接触文件。
  • directory_iterator 类:获取文件系统目录中文件的迭代器容器,其元素为 directory_entry对象(可用于遍历目录)
  • file_status 类:用于获取和修改文件(或目录)的属性(需要了解C++11的强枚举类型(即枚举类))

使用流程

  1. 需要有一个path对象为基础,如果需要修改路径,可以调用其成员函数进行修改(注意其实只是处理字符串)。
  2. 需要获取文件信息需要通过path构造directory_entry,但需要path一定存在才能调用构造,所以需要实现调用exists(path .)函数确保目录存在才能构造directory_entry(注意文件入口中的exists无法判断)。
  3. 若需遍历,则可以使用 directory_iterator,进行遍历

实例

#include <iostream>
#include<filesystem>
using namespace std;
using namespace std::filesystem;
int main(){
	path str("C:\\Windows");
	if (!exists(str))		//必须先检测目录是否存在才能使用文件入口.
		return 1;
	directory_entry entry(str);		//文件入口
	if (entry.status().type() == file_type::directory)	//这里用了C++11的强枚举类型
		cout << "该路径是一个目录" << endl;
	directory_iterator list(str);	        //文件入口容器
	for (auto& it:list) 
		cout << it.path().filename()<< endl;	//通过文件入口(it)获取path对象,再得到path对象的文件名,将之输出
	system("pause");
	return 0;
}

常用函数

void copy(const path& from, const path& to) :目录复制

path absolute(const path& pval, const path& base = current_path()) :获取相对于base的绝对路径

bool create_directory(const path& pval) :当目录不存在时创建目录

bool create_directories(const path& pval) :形如/a/b/c这样的,如果都不存在,创建目录结构

bool exists(const path& pval) :用于判断path是否存在

uintmax_t file_size(const path& pval) :返回目录的大小

file_time_type last_write_time(const path& pval) :返回目录最后修改日期的file_time_type对象

bool remove(const path& pval) :删除目录

uintmax_t remove_all(const path& pval) :递归删除目录下所有文件,返回被成功删除的文件个数

void rename(const path& from, const path& to) :移动文件或者重命名

想了解更多信息的话,点这里

参考:https://blog.csdn.net/qq_40946921/article/details/91394589,https://docs.microsoft.com/zh-cn/cpp/standard-library/filesystem?view=msvc-170

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 17:55:54  更:2022-05-24 17:57:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 1:47:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码