方式1:
通过open拿到文件描述符,创建个stat结构体,里面包含了文件信息,提交给fstat方法后,就可以拿到文件的信息了,里面就有文件的大小
#include <sys/stat.h> //在Unix/Linux系统下使用
fd = open("lseek.txt", O_RDWR|O_CREAT, 0644);
if(fd < 0){
perror("open lseek.txt error");
exit(1);
}
struct stat fileStat;
fstat(fd,&fileStat);
// stat("lseek.txt",&fileStat); //或者是通过stat使用文件路径获取文件描述
std::cout<< "当前文件指针偏移:"
<<lseek(fd,0,SEEK_CUR)
<< "文件大小:" << fileStat.st_size
<< std::endl;
方式2:
通过lseek指针移动到文件结尾,获取指针的偏移量来获取文件的大小,不推荐该方式,文件大的时候速度会慢
int get_file_size(){
int fd;
fd = open("lseek.txt", O_RDWR|O_CREAT, 0644);
if(fd < 0){
perror("open lseek.txt error");
exit(1);
}
int file_size = lseek(fd,0,SEEK_END); //将文件指针移动到末尾,返回的就是文件结尾处的偏移量,也就是文件大小
std::cout<< "当前文件大小:"
<<file_size
<< std::endl;
}
方式3
通过c++的filesystem库来获取,需要添加头文件<filesystem>
[]{
std::string filePath = "lseek.txt"; // 替换为您要获取大小的文件路径
try {
// 使用std::filesystem::file_size函数获取文件大小
std::uintmax_t fileSize = std::filesystem::file_size(filePath);
std::cout << "文件大小为:" << fileSize << " 字节" << std::endl;
} catch (const std::filesystem::filesystem_error& e) {
std::cerr << "发生错误:" << e.what() << std::endl;
}
};