在C ++ / C中查找文件的一部分大小?

时间:2013-07-04 16:27:48

标签: c++ c

我的数据存储在磁盘上的大文件中。现在我想找到这些数据的某些部分的大小(以字节为单位),而不将这些数据转储到单独的文件中。是否可以这样做。

E.g。让我说我的文件是10000000000行。现在我想找到1000000行的大小。我知道我可以将这100行存储在一个单独的文件中并找到它的大小,但我不想这样做。是否有其他出路或这是唯一的出路。

3 个答案:

答案 0 :(得分:3)

是和否。您可以阅读(但不存储)您关注的数据,并使用ftell / tellg查找您当前的文件位置。所以,开始你关心的事情,获得​​位置,阅读你关心的结局,再次获得位置,然后减去以获得大小。

“是和否”的原因是C和C ++标准不保证您获得的结果将与磁盘上的数据大小完全匹配。例如,如果你在Windows上,新行在外部“\ r \ n”和内部“\ n”之间进行转换 - 标准不会说这是否会被计为一个或两个字符。< / p>

如果这不足以达到您的目的,您可以一次读取一个字符的数据,并计算字符数。有了这个,您可以根据需要考虑平台的变化(例如,在Windows下为\n的计数添加额外的字符。)

答案 1 :(得分:1)

如果您知道如何查找所关注部分的开头和结尾,则可以使用fstream::tellg()(或在C中使用ftell(file))作为起始点,并从{{ 1}}结束点。但是如果你没有一个简单的方法来找到起点和终点,除了找到你关心的位之外,除了读取文件之外别无其他,然后计算内容的大小直到找到结束。

答案 2 :(得分:0)

您可以在有趣的部分的开头使用ftell()/ fgetpos(),而不是扫描到该部分的结尾,再次调用相同的函数,并计算差异,将是该部分的大小。

请记住,ftell()在文本文件与二进制文件(例如Windows)不同的系统上处理文本文件时可能会感到困惑。