我如何知道使用ofstream时达到文件的最大大小?
时间:2020-03-06 14:44:01 来源:igfitidea点击:
在使用ofstream写入文件时,如何知道文件的大小何时达到操作系统的最大文件大小,更具体地说是linux的最大文件大小?
解决方案
我认为(不是100%肯定)我们只需要在写入OS之后的最大文件大小后就比较流的当前大小。否则,我猜测底层的实现只会让我们继续编写,直到实际的OS io调用失败为止。
首先,最大文件大小是文件系统限制,而不是操作系统限制。对于特定的文件系统,它甚至会根据文件系统的格式而有所不同。
至于我们如何确定已达到限制,代码可能会在发生这种情况时引发异常,然后我们可以将其与操作系统错误代码相关联。
请注意,对于" TB"中的"典型" EXT2文件系统,实际限制相当大。在实践中,我们可能永远都做不到。如果我们正在认真地存储TB的数据,则可能需要考虑是否存在一种更合理的存储方式,而不是单个巨大的文件。
我们可以检查是否设置了不良位。同样,使用异常可以在设置坏位时强制流抛出异常。
好吧,fstream没有"写入超出实现定义的最大文件大小的文件"(来自" man 2 write")的排他性例外,例如使用C函数" write"时可用的错误代码EFBIG 。因此,我认为必须像Jim Crafton所说的那样,将文件大小与一些用户定义的最大大小或者" streamoff"变量(用于处理文件大小,文件偏移量的变量类型)持有的最大值进行比较实际上在iostream中。