我正在编写一个在文件中维护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变大时我是否有可能失去一些位?
答案 0 :(得分:2)
tellp / tellg(streampos)返回的这些值用于存储您正在使用的平台中的最大文件大小,因此无法保证它们适合长时间。事实上,它们可能不适合size_t,long long或任何最大的基本类型,因为磁盘存储空间通常比地址空间大几个数量级,并且基本类型是在考虑到后者时定义的。
但IMO要做的事情就是不要使用另一个更大的类型,除非你正在编写一个真正需要处理大文件的程序(比如DBMS左右),这是一种罕见的情况。如果最大预期大小适合长期,只需在程序中放置保护措施,拒绝创建或处理大于此的文件。
另一方面,如果您确实需要处理大量文件,那么事情会变得复杂得多,而且全面的答案会更长。