如何收集和存储tellp(),所以tellg()的返回类型?(How to collect and

2019-09-16 10:24发布

我正在写在文件中保持linked_list的程序。 所以,我在整个文件中穿越,利用tellp()/所以tellg()并将其添加到特定的长整数(可以看作是一个偏移量)来获得新的位置。

一个简单的例子是

   long next_offset =  sizeof(long) + sizeof(int) .... 
   //like size of all the elements in the record, etc

   curr_node = out.seekg();
   while(curr_node != -1) {
          out.read(...);
          **curr_node.seekg(curr_node.tellp() + next_offset);**
          out.read((char *)&curr_node,sizeof(long));
   }

所以这里基本上我节省tellp()值,只要和DNG的长此外,这是罚款? 或者是有一个机会,当pos_value变大我可能会失去一些位???

Answer 1:

通过tellp /所以tellg(的streampos)返回的这些值是指存储在您使用的平台的最大文件大小,所以也不能保证他们会适合在长。 事实上,他们可能不适合在为size_t,很长很长,或什么是最大的基本类型,因为磁盘存储空间通常是数量级比地址空间大的订单,基本类型,是经过后来的定义。

但IMO做实际的事情不是,除非你正在编写一个程序,真正需要处理大文件(如DBMS左右),这是一种罕见的情况下使用另一个,更大的类型。 如果预期的最大尺寸在相当长的千篇一律,简单地采取防护程序拒绝创建或处理比更大的文件。

在另一方面,如果这是真的,你可能需要处理大量文件的话,那么事情就复杂多了,和一个全面的答案会更长。



文章来源: How to collect and store tellp(), tellg() return types?