商城首页欢迎来到中国正版软件门户

您的位置:首页 >c++如何获取文件的大小和修改日期_c++ 文件大小与修改日期获取方法

c++如何获取文件的大小和修改日期_c++ 文件大小与修改日期获取方法

  发布于2025-10-17 阅读(0)

扫一扫,手机访问

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

c++如何获取文件的大小和修改日期_c++ 文件大小与修改日期获取方法

在C++中获取文件的大小和修改日期,可以通过系统调用或标准库结合平台相关API实现。下面介绍跨平台(主要以Windows和Linux)常用的方法,使用<filesystem>(C++17起推荐)以及传统的stat函数。

C++17 filesystem 方法(推荐)

现代C++推荐使用 <filesystem> 库,简洁且跨平台。

示例代码:

#include <iostream>
#include <filesystem>
#include <chrono>
#include <iomanip>

int main() { std::string filename = "test.txt";

if (std::filesystem::exists(filename)) {
    // 获取文件大小(字节)
    auto size = std::filesystem::file_size(filename);
    std::cout &lt;&lt; "文件大小: " &lt;&lt; size &lt;&lt; " 字节\n";

    // 获取最后修改时间
    auto time = std::filesystem::last_write_time(filename);

    // 转换为本地时间并输出
    auto sctp = std::chrono::time_point_cast&lt;std::chrono::system_clock::duration&gt;(
        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 &lt;&lt; "修改日期: " &lt;&lt; std::put_time(std::localtime(&amp;cftime), "%Y-%m-%d %H:%M:%S") &lt;&lt; '\n';
} else {
    std::cout &lt;&lt; "文件不存在\n";
}

return 0;

}

编译时需启用C++17:g++ -std=c++17 file.cpp -o file (Linux)或在Visual Studio中设置语言标准。

传统 stat 方法(兼容旧版本C++)

适用于不支持C++17的环境,使用 <sys/stat.h><ctime>

示例代码(Linux/Windows通用):

#include <iiostream>
#include <sys/stat.h>
#include <ctime>

int main() { std::string filename = "test.txt"; struct stat buffer;

if (stat(filename.c_str(), &amp;buffer) == 0) {
    // 文件大小
    std::cout &lt;&lt; "文件大小: " &lt;&lt; buffer.st_size &lt;&lt; " 字节\n";

    // 修改时间
    std::time_t modTime = buffer.st_mtime;
    char* timeStr = std::ctime(&amp;modTime);
    timeStr[strlen(timeStr)-1] = '\0'; // 去掉换行符
    std::cout &lt;&lt; "修改日期: " &lt;&lt; timeStr &lt;&lt; '\n';
} else {
    std::cout &lt;&lt; "无法获取文件信息\n";
}

return 0;

}

注意:stat 在Windows中可用,但路径分隔符需注意。Windows也提供 _stat 变体,如 _stat64 支持大文件。

关键点总结

  • 优先使用 std::filesystem::file_size()std::filesystem::last_write_time()(C++17)
  • 时间处理较复杂,需将 file_time_type 转为 system_clock 才能格式化输出
  • 传统 stat 方法兼容性好,适合嵌入式或老编译器环境
  • 检查文件是否存在,避免操作失败

基本上就这些。根据项目环境选择合适方式,新项目建议直接用 <filesystem>。不复杂但容易忽略时间转换细节。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注