c++kquote>使用C++17 filesystem可跨平台获取文件大小和修改日期,推荐std::filesystem::file_size和last_write_time,配合chrono处理时间转换;传统stat函数适用于旧版本C++,兼容性好但需注意平台差异。

在C++中获取文件的大小和修改日期,可以通过系统调用或标准库结合平台相关API实现。下面介绍跨平台(主要以Windows和Linux)常用的方法,使用(C++17起推荐)以及传统的stat函数。
C++17 filesystem 方法(推荐)
现代C++推荐使用 库,简洁且跨平台。
示例代码:
#include #include #include #includeint main() {std::string filename = "test.txt";
if (std::filesystem::exists(filename)) { // 获取文件大小(字节) auto size = std::filesystem::file_size(filename); std::cout << "文件大小: " << size << " 字节n"; // 获取最后修改时间 auto time = std::filesystem::last_write_time(filename); // 转换为本地时间并输出 auto sctp = std::chrono::time_point_cast( time - std::filesystem::file_time_type::clock::now() + std::chrono::system_clock::now() ); std::time_t cftime = std::chrono::system_clock::to_time_t(sctp); std::cout << "修改日期: " << std::put_time(std::localtime(&cftime), "%Y-%m-%d %H:%M:%S") << 'n';} else { std::cout << "文件不存在n";}return 0;
}编译时需启用C++17:g++ -std=c++17 file.cpp -o file (Linux)或在Visual Studio中设置语言标准。
传统 stat 方法(兼容旧版本C++)
适用于不支持C++17的环境,使用 和 。
示例代码(Linux/Windows通用):
#include #include #includeint main() {std::string filename = "test.txt";struct stat buffer;
if (stat(filename.c_str(), &buffer) == 0) { // 文件大小 std::cout << "文件大小: " << buffer.st_size << " 字节n"; // 修改时间 std::time_t modTime = buffer.st_mtime; char* timeStr = std::ctime(&modTime); timeStr[strlen(timeStr)-1] = '