我的数据存储在磁盘上的大文件中。现在我想找到这些数据的某些部分的大小(以字节为单位),而不将这些数据转储到单独的文件中。是否可以这样做。
E.g。让我说我的文件是10000000000行。现在我想找到1000000行的大小。我知道我可以将这100行存储在一个单独的文件中并找到它的大小,但我不想这样做。是否有其他出路或这是唯一的出路。
答案 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)不同的系统上处理文本文件时可能会感到困惑。