【问题标题】:How to collect and store tellp(), tellg() return types?如何收集和存储tellp()、tellg()返回类型?
【发布时间】:2012-04-08 18:37:36
【问题描述】:

我正在编写一个在文件中维护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() 值保存为 long 和 dng 长加法,这样可以吗?或者当 pos_value 变大时我可能会丢失一些位???

【问题讨论】:

    标签: c++ file type-conversion long-integer fstream


    【解决方案1】:

    tellp/tellg (streampos) 返回的这些值用于存储您正在使用的平台中的最大文件大小,因此无法保证它们适合 long。事实上,它们可能不适合 size_t、long long 或任何最大的基本类型,因为磁盘存储空间通常比地址空间大几个数量级,而基本类型是为后者定义的。

    但是 IMO 实际要做的事情是不要使用另一种更大的类型,除非您正在编写一个真正需要处理大文件的程序(如 DBMS 左右),这种情况很少见。如果最大预期大小适合很长,只需在您的程序中添加保护措施以拒绝创建或处理大于该大小的文件。

    另一方面,如果确实是这种情况,您可能必须处理大量文件,那么事情就会变得复杂得多,而且综合答案会更长。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      相关资源
      最近更新 更多