我们来创建一个补充问题this one。 在C++中获取文件大小的最常用方法是什么? 在回答之前,确保它是可移植的(可以在Unix,Mac和Windows上执行), 可靠,易于理解且不依赖库(无需增强或qt,但例如glib可以,因为它是便携式库)。如何在C++中获取文件的大小?
回答
#include <fstream>
std::ifstream::pos_type filesize(const char* filename)
{
std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
return in.tellg();
}
有关C++文件的更多信息,请参阅http://www.cplusplus.com/doc/tutorial/files/。
使用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;
}
虽然不一定是最流行的方法,我听说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;
}
在某些系统上还有一个stat64/fstat64。所以,如果你需要这个非常大的文件,你可能想看看使用这些。
上述代码可以移植到C&C++ – Matt 2013-12-04 22:45:34
+1中提到以二进制模式打开流。这解决了我在使用read()时使用fseek()+ ftell()大小的问题。 – 2014-11-07 20:14:09
我需要添加#包括
在C++中,你可以使用下面的函数,它会以字节的形式返回你的文件大小。
#include <fstream>
int fileSize(const char *add){
ifstream mySource;
mySource.open(add, ios_base::binary);
mySource.seekg(0,ios_base::end);
int size = mySource.tellg();
mySource.close();
return size;
}
这是行不通的,你不能将tellg输出转换为int – 2018-01-25 10:29:29
@StepanYakovenko看看这个网址http://www.cplusplus.com/reference/istream/istream/tellg/ – 2018-01-26 18:55: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";
}
值得注意的是'filesystem'是ISO C++的C++ 17 – chappjc 2016-12-10 02:17:47
所以比tellg快吗? – 2018-03-07 02:11:16
#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);
}
正好下面的代码片断解决了在此 交:)
///
/// Get me my file size in bytes (long long to support any file size supported by your OS.
///
long long Logger::getFileSize()
{
std::streampos fsize = 0;
std::ifstream myfile ("myfile.txt", ios::in); // File is of type const char*
fsize = myfile.tellg(); // The file pointer is currently at the beginning
myfile.seekg(0, ios::end); // Place the file pointer at the end of file
fsize = myfile.tellg() - fsize;
myfile.close();
static_assert(sizeof(fsize) >= sizeof(long long), "Oops.");
cout << "size is: " << fsize << " bytes.\n";
return fsize;
}
- 1. 如何获取C文件的大小?
- 2. 在C中获取FTP文件大小#
- 3. 在C++中获取文件大小
- 4. 如何在visual C++中获取文件的大小?
- 5. 如何在Windows中使用C获取文件夹大小?
- 6. 如何在C#Windows中获取文件大小,文件名,文件扩展名?
- 7. 如何在android中获取临时文件的文件大小?
- 8. 如何从C#中的httpwebrequest获取文件夹大小(Winform)
- 9. 如何获取WAR文件的大小?
- 10. 如何获取文件夹的大小?
- 11. 以C返回大小获取大文件的大小为0
- 12. 如何从OpenFileDialog获取文件大小?
- 13. 如何获取大型(> 4 GB)文件的文件大小?
- 14. Java:如何:有效地获取2GB大小的文件大小?
- 15. 在php中获取文件大小
- 16. 如何从C/C++获取virt大小?
- 17. 如何在C#中获取目录大小(目录中的文件)?
- 18. 如何在Android中获取SD卡上文件夹的大小?
- 19. 遍历FTP子文件夹来获取文件大小在C#
- 20. SetFilePointerEx获取文件大小
- 21. 获取文件大小
- 22. 获取文件夹大小
- 23. 获取文件大小ExtJS
- 24. 获取文件大小笨
- 25. C++如何获取PNG文件的图像大小(在目录中)
- 26. 获取目录中文件的大小
- 27. 如何从NSURL获取AVPlayer的文件大小和当前文件大小iOS4.0
- 28. 获取大文件的大小
- 29. 如何获取C#文本文件中的最小值和最大值?
- 30. 如何在Chrome扩展中使用JavaScript获取文件大小?
的FSTAT功能的问题我相信是便携式的,而且很容易使用。 – ultifinitus 2011-04-30 07:09:33
可能与http://stackoverflow.com/questions/2409504 – 2011-04-30 07:10:58
dupicated为什么没有提升,但允许glib? Boost也是便携式的。 – rve 2011-04-30 07:14:45