使用ofstream编写文件时,如何知道文件大小何时达到操作系统的最大文件大小 - 更具体地说是linux的最大文件大小 - ??
答案 0 :(得分:5)
首先,最大文件大小是文件系统限制,而不是操作系统限制。根据文件系统的格式化,它甚至会因特定文件系统而异。
至于你如何弄清楚你已达到极限,你的代码可能会在发生这种情况时抛出异常,然后你就可以将其与OS错误代码联系起来。
请注意,对于“典型”EXT2文件系统,实际限制为pretty darn big - 在太字节中。在实践中,你可能永远不会达到它。如果你真的在积累数TB的数据,你可能想要考虑是否有一种更合理的方式来存储它,而不是一个巨大的文件。
答案 1 :(得分:4)
您可以查看是否the bad bit is set。此外,使用exceptions,可以在坏位置位时强制流引发异常。
答案 2 :(得分:0)
我认为(不是100%肯定)你只需要在写入后将流的当前大小与操作系统的最大文件大小进行比较。否则我猜测底层实现只会让你继续写,直到实际的OS io调用失败。
答案 3 :(得分:0)
好吧,fstream没有“写入超出实现定义的最大文件大小的文件”的独占异常(来自“man 2 write”),就像使用C函数时可用的错误代码EFBIG一样'写'。因此,我认为必须像Jim Crafton所说的那样,将文件大小与用户定义的最大大小或“streamoff”变量所保持的最大值进行比较,该变量是用于处理文件大小的变量类型 - 文件实际上是偏移 - 在iostream中。