2

我正在编写一个在文件中维护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 变大时我可能会丢失一些位???

4

1 回答 1

2

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

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

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

于 2012-04-08T19:18:35.340 回答