C++如何获取文件大小_C++ file_size函数与seekp定位方法

1次阅读

c++kquote>c++中获取文件大小主要有两种方法:1. 使用C++17的std::Filesystem::file_size函数,直接返回文件字节数,简洁安全;2. 通过ifstream结合seekg与tellg,在二进制模式下定位文件末尾获取大小,兼容性好但需手动处理错误。优先推荐第一种方法。

C++如何获取文件大小_C++ file_size函数与seekp定位方法

在C++中获取文件大小有多种方法,常用的方式包括使用标准库中的 std::filesystem::file_size 函数(C++17起支持)和通过文件流结合 seekgtellg 进行定位计算。下面分别介绍这两种主流方法。

使用 std::filesystem::file_size 获取文件大小

从 C++17 开始,标准库提供了 filesystem 模块,其中的 file_size 函数可以直接返回指定文件的字节数,使用简单且不易出错。

示例代码:

C++如何获取文件大小_C++ file_size函数与seekp定位方法

Project IDX

Google推出的一个实验性的ai辅助开发平台

C++如何获取文件大小_C++ file_size函数与seekp定位方法 166

查看详情 C++如何获取文件大小_C++ file_size函数与seekp定位方法

#include <iostream> #include <filesystem> <p>int main() { const char* filename = "example.txt"; if (std::filesystem::exists(filename)) { std::uintmax_t size = std::filesystem::file_size(filename); std::cout << "文件大小: " << size << " 字节" << std::endl; } else { std::cout << "文件不存在" << std::endl; } return 0; }

注意:编译时需要启用 C++17 或更高版本,并链接 stdc++fs(部分编译器如 g++ 需添加 -lstdc++fs)。

使用 seekg 和 tellg 通过输入流获取大小

对于不支持 C++17 的环境,可以使用 ifstream 结合 seekg 和 tellg 方法来测量文件大小。基本思路是将读指针移到文件末尾,再用 tellg 获取当前位置,即为文件总长度。

示例代码:

#include <iostream> #include <fstream> <p>long getFileSize(const char* filename) { std::ifstream file(filename, std::ios::binary | std::ios::ate); if (!file.is_open()) { return -1; // 打开失败 } long size = file.tellg();  // 当前位置即文件末尾偏移量 file.close(); return size; }</p><p>int main() { long size = getFileSize("example.txt"); if (size != -1) { std::cout << "文件大小: " << size << " 字节" << std::endl; } else { std::cout << "无法打开文件" << std::endl; } return 0; }

关键点说明:

  • 打开文件时使用 std::ios::ate 标志会直接将读指针定位到文件末尾。
  • 使用二进制模式(std::ios::binary)避免文本模式下换行符转换影响大小判断。
  • tellg 返回的是当前读指针的位置,在 ate 模式下就是文件总字节数。

常见问题与注意事项

两种方法各有适用场景:

  • filesystem::file_size 更现代、简洁,适合新项目;但需注意兼容性。
  • 流方式兼容性好,适用于老标准或嵌入式环境,但需手动处理打开失败等情况。
  • 不能对标准输入或其他非普通文件(如设备文件)调用 file_size,否则会抛异常或返回错误。

基本上就这些。选择哪种方式取决于你的编译环境和项目要求。如果条件允许,优先使用 std::filesystem::file_size,代码更清晰安全。

立即学习C++免费学习笔记(深入)”;

text=ZqhQzanResources