![]() |
睿智的葫芦 · Word处理代码文本之删除注释与空行_ZYH ...· 1 年前 · |
![]() |
光明磊落的玉米 · mysql备份数据库拒绝访问-掘金· 1 年前 · |
![]() |
粗眉毛的啄木鸟 · C# 获取注释信息_51CTO博客_c#注释· 1 年前 · |
![]() |
耍酷的跑步机 · adb获取电池信息以及电量消耗信息 - ...· 1 年前 · |
我确信我在手册中遗漏了这一点,但是如何使用C++的
istream
类从
fstream
头确定文件的大小(以字节为单位)呢?
发布于 2012-11-15 17:00:17
您可以使用
ios::ate
标志(和
ios::binary
标志)打开文件,因此
tellg()
函数将直接为您提供文件大小:
ifstream file( "example.txt", ios::binary | ios::ate);
return file.tellg();
发布于 2010-03-09 22:04:41
你可以搜索到最后,然后计算差值:
std::streampos fileSize( const char* filePath ){
std::streampos fsize = 0;
std::ifstream file( filePath, std::ios::binary );
fsize = file.tellg();
file.seekg( 0, std::ios::end );
fsize = file.tellg() - fsize;
file.close();
return fsize;
}
发布于 2016-06-14 17:29:26
不要使用
tellg
来确定文件的确切大小。
tellg
确定的长度将大于可从文件中读取的字符数。
在堆栈溢出问题中,
tellg() function give wrong size of file?
tellg
不报告文件的大小,也不报告距开头的偏移量。它报告一个令牌值,稍后可以用来查找相同的位置,仅此而已。(甚至不能保证可以将该类型转换为整型。)对于Windows (和大多数非Unix系统),在文本模式下,tellg返回的内容与到达该位置所需读取的字节数之间没有直接和直接的映射关系。
如果确切地知道可以读取的字节数很重要,那么可靠地做到这一点的唯一方法就是读取。您应该能够使用以下内容来完成此操作:
#include <fstream>
#include <limits>