C++file_size获取文件大小C++17

2026-04-01 19:40:22 1683阅读 0评论

如何在C++17中获取文件大小

在现代编程中,处理文件操作是一个常见的任务。无论是读取配置文件还是保存日志,了解如何获取文件大小都是非常有用的技能。本文将指导你如何在C++17中使用标准库来获取文件大小。

使用 <filesystem> 头文件

C++17引入了 <filesystem> 头文件,它提供了跨平台的文件系统操作功能。要获取文件大小,你可以使用 std::filesystem::file_size 函数。

#include <iostream>
#include <filesystem>

int main() {
    std::string filePath = "example.txt";

    try {
        std::uintmax_t fileSize = std::filesystem::file_size(filePath);
        std::cout << "File size: " << fileSize << " bytes" << std::endl;
    } catch (const std::filesystem::filesystem_error& e) {
        std::cerr << "Error: " << e.what() << std::endl;
    }

    return 0;
}

解释

  1. 包含头文件:首先,你需要包含 <filesystem> 头文件。
  2. 定义文件路径:指定你要检查的文件路径。
  3. 获取文件大小:使用 std::filesystem::file_size 函数获取文件大小,并将其存储在一个 std::uintmax_t 类型的变量中。
  4. 异常处理:使用 try-catch 块捕获可能的文件系统错误,例如文件不存在或权限问题。

手动实现

如果你不想使用 <filesystem> 头文件,也可以手动实现文件大小的获取。这通常需要使用操作系统特定的API。以下是一些常见操作系统的示例:

Windows

在Windows上,可以使用 GetFileSizeEx 函数。

#include <iostream>
#include <windows.h>

int main() {
    std::wstring filePath = L"example.txt";
    HANDLE hFile = CreateFile(filePath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile == INVALID_HANDLE_VALUE) {
        std::cerr << "Error opening file" << std::endl;
        return 1;
    }

    LARGE_INTEGER fileSize;
    if (!GetFileSizeEx(hFile, &fileSize)) {
        CloseHandle(hFile);
        std::cerr << "Error getting file size" << std::endl;
        return 1;
    }

    std::cout << "File size: " << fileSize.QuadPart << " bytes" << std::endl;

    CloseHandle(hFile);
    return 0;
}

Linux 和 macOS

在Linux和macOS上,可以使用 stat 函数。

#include <iostream>
#include <sys/stat.h>

int main() {
    const char* filePath = "example.txt";
    struct stat fileStat;

    if (stat(filePath, &fileStat) != 0) {
        perror("Error");
        return 1;
    }

    std::cout << "File size: " << fileStat.st_size << " bytes" << std::endl;

    return 0;
}

解释

  1. Windows

    • 使用 CreateFile 打开文件。
    • 使用 GetFileSizeEx 获取文件大小。
    • 关闭文件句柄。
  2. Linux 和 macOS

    • 使用 stat 函数获取文件状态。
    • 输出文件大小。

总结

通过上述方法,你可以在C++17中轻松地获取文件大小。使用 <filesystem> 头文件是最简单且跨平台的方法,而手动实现则提供了更多的控制和灵活性。无论哪种方式,都可以根据你的需求选择最合适的方法。希望这篇文章对你有所帮助!

文章版权声明:除非注明,否则均为Dark零点博客原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
验证码
评论列表 (暂无评论,1683人围观)

还没有评论,来说两句吧...

目录[+]