让我们为这个问题创建一个补充问题.在C++中获取文件大小的最常用方法是什么?在回答之前,确保它是可移植的(可以在Unix,Mac和Windows上执行),可靠,易于理解且没有库依赖(没有boost或qt,但是例如glib是可以的,因为它是可移植的库).
Spy*_*ros 151
#include <fstream>
std::ifstream::pos_type filesize(const char* filename)
{
std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
return in.tellg();
}
Run Code Online (Sandbox Code Playgroud)
有关C++文件的更多信息,请参见http://www.cplusplus.com/doc/tutorial/files/.
Mat*_*att 70
虽然不一定是最流行的方法,但我听说ftell,fseek方法在某些情况下可能并不总能给出准确的结果.具体来说,如果使用已经打开的文件并且需要对其进行处理并且它恰好作为文本文件打开,那么它将给出错误的答案.
以下方法应始终有效,因为stat是Windows,Mac和Linux上c运行时库的一部分.
long GetFileSize(std::string filename)
{
struct stat stat_buf;
int rc = stat(filename.c_str(), &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
}
or
long FdGetFileSize(int fd)
{
struct stat stat_buf;
int rc = fstat(fd, &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
}
Run Code Online (Sandbox Code Playgroud)
在某些系统上还有一个stat64/fstat64.因此,如果你需要这个非常大的文件,你可能想看看使用它们.
bam*_*s53 28
使用C++文件系统TS:
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main(int argc, char *argv[]) {
fs::path p{argv[1]};
p = fs::canonical(p);
std::cout << "The size of " << p.u8string() << " is " <<
fs::file_size(p) << " bytes.\n";
}
Run Code Online (Sandbox Code Playgroud)
And*_*dro 24
也可以使用fopen(),fseek()和ftell()函数找到它.
int get_file_size(std::string filename) // path to file
{
FILE *p_file = NULL;
p_file = fopen(filename.c_str(),"rb");
fseek(p_file,0,SEEK_END);
int size = ftell(p_file);
fclose(p_file);
return size;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
#include <stdio.h>
int main()
{
FILE *f;
f = fopen("mainfinal.c" , "r");
fseek(f, 0, SEEK_END);
unsigned long len = (unsigned long)ftell(f);
printf("%ld\n", len);
fclose(f);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
241097 次 |
| 最近记录: |