【发布时间】:2018-09-06 01:01:28
【问题描述】:
我正在开发一个可以在闪存驱动器上生成无限文本文件的 Python 程序。该程序将是唯一在该闪存驱动器上运行的程序,我想在每次写入时检查是否有足够的存储空间。
如果有,我想将文件写入驱动器。如果没有足够的空间,我想对内容做点别的。例如:
def write_file(contents):
if "Check if there is sufficient storage space on E:\ drive.":
with open("filename", "w") as file:
file.write(contents)
else:
# Alternative method for dealing with content.
我需要找到一个好方法来确定file.write() 操作将占用多少空间,并将其与驱动器上的可用空间进行比较。
谢谢!
【问题讨论】:
-
这在典型的操作系统中是不可能的,因为在您检查时可能有足够的存储空间,而不是在您尝试写入时,因为其他应用程序可能已经填满了存储空间。一个健壮的应用程序在写入数据时必须能够容忍故障。预检只能是建议性的。反之亦然:检查时可用存储空间可能不足,但写入时可用存储空间充足。一种解决方法是为文件分配所有空间,然后写入实际数据。但即便如此,也可能会发生 I/O 错误(例如硬件故障)。
-
@BenjaminSoyka:“老鼠和男人最好的计划往往会出错。”也许您的解决方案今天有效,但明天有用的操作系统会为存储添加索引,从而占用索引空间。或者,正如我所写,发生 I/O 错误。或者,您计算要写入的实际数据量的存储空间,但忽略了计算文件系统需要添加多少以用于会计目的(跟踪文件段等)。而且不知道要添加多少,因为明天驱动器可能会使用不同类型的文件系统进行格式化。