【发布时间】:2008-09-25 16:58:14
【问题描述】:
在使用 ofstream 写入文件时,我如何知道文件大小何时达到操作系统的最大文件大小 - 更具体地说是 linux 的最大文件大小 - ??
【问题讨论】:
在使用 ofstream 写入文件时,我如何知道文件大小何时达到操作系统的最大文件大小 - 更具体地说是 linux 的最大文件大小 - ??
【问题讨论】:
首先,最大文件大小是文件系统限制,而不是操作系统限制。根据文件系统的格式化方式,它甚至会因特定文件系统而异。
至于您如何判断是否已达到限制,您的代码可能会在发生这种情况时引发异常,然后您将能够将其与操作系统错误代码相关联。
请注意,“典型”EXT2 文件系统的实际限制为pretty darn big - 以TB 为单位。在实践中,你可能永远也达不到它。如果您认真地积累 TB 级数据,您可能需要考虑是否有更合理的方式来存储它,而不是单个巨大的文件。
【讨论】:
你可以检查the bad bit is set。此外,使用exceptions,您可以强制流在设置坏位时抛出异常。
【讨论】:
我认为(不是 100% 肯定)你只需要在写入操作系统的最大文件大小后比较流的当前大小。否则我猜底层实现只会让你继续写,直到实际的操作系统 io 调用失败。
【讨论】:
好吧,fstream 对于“写入超过实现定义的最大文件大小的文件”(来自“man 2 write”)没有排他性例外,例如使用 C 函数时可用的错误代码 EFBIG '写'。因此,我认为必须像 Jim Crafton 所说的那样,将文件大小与一些用户定义的最大大小或与“streamoff”变量持有的最大值进行比较,该变量是用于处理文件大小的变量类型 - 文件实际偏移 - 在 iostream 中。
【讨论】: