在问题Using C++ filestreams (fstream), how can you determine the size of a file?中,最常见的答案是以下C ++代码段:
ifstream file("example.txt", ios::binary | ios::ate);
return file.tellg();
自己运行我发现任意大文件的大小可以通过单个读取操作即时确定。
传统上我会假设要确定文件的大小,必须逐字节地移动它,添加到字节计数器。这是如何实现的呢?元数据?
答案 0 :(得分:2)
文件的大小嵌入在文件系统的文件元数据中。不同的文件系统有不同的方式来存储这些信息。
编辑显然,这是一个不完整的答案。当有人提供答案时,他会在ex3或ntfs这样的公共文件系统上举例说明,或者确切知道文件大小是如何知道和存储的,我将删除这个答案。
答案 1 :(得分:0)
文件大小作为元数据存储在大多数文件系统上。除了上面的GI Joe的回答,你可以在posix系统上使用stat函数:
struct stat statbuf;
stat("filename.txt", &statbuf);
printf("The file is %d bytes long\n", statbuf.st_size);
答案 2 :(得分:-1)
设置ios::ate
时,初始位置将是文件的结尾,但您可以随后进行搜索。
tellg
返回输入流中当前字符的位置。另一个关键部分是ios::binary
。
所以当它打开文件流并告诉你当前位置(这是文件的结尾)时,它会为你找到文件的末尾。我想你可以说它在某种程度上是一种破解,但逻辑是有道理的。
如果您想了解文件流在较低级别的工作方式,请阅读StackOverflow question。