gpt4 book ai didi

c++ - 如何收集和存储 tellp()、tellg() 返回类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:50 25 4
gpt4 key购买 nike

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

最佳答案

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

但 IMO 的实际做法是不要使用其他更大的类型,除非您编写的程序确实需要处理大文件(如 DBMS 等),这种情况很少见。如果最大预期大小适合 long,只需在您的程序中设置安全措施以拒绝创建或处理大于该大小的文件。

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

关于c++ - 如何收集和存储 tellp()、tellg() 返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10065323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com