如何在C++中获取文件创建日期并按其排序?求适用库指导
获取文件创建日期并排序的实现方案
常用库/框架(按编程语言分类)
- Python:标准库
os、datetime或pathlib(Python3.4+),无需额外安装 - C++:C++17引入的
<filesystem>标准库,原生支持文件操作 - Java:
java.nio.file包下的Files与BasicFileAttributes类 - JavaScript(Node.js):内置
fs模块,通过statSync方法获取文件属性
C++ <filesystem>库的具体实现
如果你用C++,<filesystem>是最直接的选择,以下是完整的实现步骤和代码:
核心步骤
- 遍历目标目录,筛选出普通文件
- 提取每个文件的创建时间与路径
- 按创建时间对文件列表排序
示例代码
#include <filesystem> #include <vector> #include <algorithm> #include <iostream> namespace fs = std::filesystem; int main() { // 替换为你的目标目录路径 fs::path target_dir = "./your_directory"; if (!fs::exists(target_dir) || !fs::is_directory(target_dir)) { std::cerr << "目录不存在或无效" << std::endl; return 1; } // 存储文件路径与创建时间的配对 std::vector<std::pair<fs::path, fs::file_time_type>> file_list; // 遍历目录下的普通文件 for (const auto& entry : fs::directory_iterator(target_dir)) { if (entry.is_regular_file()) { try { auto create_time = entry.creation_time(); file_list.emplace_back(entry.path(), create_time); } catch (const fs::filesystem_error& e) { std::cerr << "读取文件信息失败:" << e.what() << std::endl; } } } // 按创建时间升序排序(最早的文件在前) std::sort(file_list.begin(), file_list.end(), [](const auto& a, const auto& b) { return a.second < b.second; }); // 输出排序结果 std::cout << "按创建时间升序排列的文件:\n"; for (const auto& file : file_list) { std::cout << file.first << "\n"; } return 0; }
编译注意事项
- 需要启用C++17或更高版本:GCC加编译参数
-std=c++17(GCC 8及以上无需额外链接库),Clang加-std=c++17 -lc++fs,MSVC直接支持。 - 平台差异:
creation_time()在Windows返回文件创建时间;Linux/macOS返回文件状态变更时间,若需真正的创建时间,macOS可通过系统API补充实现,Linux则依赖文件系统是否记录创建时间。
Python 快速实现方案(适合新手)
Python的语法更简洁,适合入门,以下是用pathlib的示例:
from pathlib import Path import os # 替换为你的目标目录 target_dir = Path("./your_directory") if not target_dir.exists() or not target_dir.is_dir(): print("目录不存在或无效") exit() file_list = [] for item in target_dir.iterdir(): if item.is_file(): # 区分系统获取创建时间 if os.name == 'nt': create_time = item.stat().st_ctime else: create_time = item.stat().st_birthtime file_list.append( (create_time, item) ) # 按创建时间升序排序 file_list.sort() # 输出结果 print("按创建时间升序排列的文件:") for _, path in file_list: print(path.name)
内容的提问来源于stack exchange,提问作者Kanella
相关产品推荐
相关产品推荐

