Python | os.posix_fallocate 函数
怎样提前分配文件磁盘空间
最近更新时间 2020-12-11 10:22:11
os.posix_fallocate 函数确保为 fd 指向的文件分配了足够的磁盘空间,该空间从偏移量 offset 开始,到 len 字节为止。
磁盘空间不足会造成文件存储异常,在磁盘空间比较少或者保存大文件前分配磁盘空间很重要。
函数定义
os.posix_fallocate(fd, offset, len)
# 函数定义
if sys.platform != 'win32':
# Unix only
...
def posix_fallocate(fd: int, offset: int, length: int) -> None: ...
...
兼容性:Unix 系统。
参数
- checkfd - 文件描述符。
- checkoffset - 文件偏移量。
- checklen - 字节长度。
返回值
- checkNone - 无。
示例1: - 使用 os.posix_fallocate() 函数确保文件磁盘空间。
# coding=utf-8
# Python3 代码
# 讲解怎样使用 os.posix_fallocate() 函数分配文件磁盘空间
# 引入 os 库
import os
# 文件路径
path = "foo.txt"
# 使用 os.open 函数打开文件
fd = os.open(path, os.O_RDWR)
# 分配磁盘空间
os.posix_fallocate(fd, 0, 50)
# 获取文件大小
size = os.path.getsize(path)
print("Size::", size)
# 关闭文件
os.close(fd)
Size:: 50
调用 os.posix_fallocate 后,没有写入文件内容,文件大小也会变为新磁盘空间大小。
示例2: - 使用 os.posix_fallocate() 函数创建文件。
# coding=utf-8
def _create_file(self, filename, size, sparse=True):
try:
f = open(filename, "w ")
except (OSError, IOError):
raise ExecutionError("Could not open %s" % filename)
try:
if sparse:
try:
os.posix_fallocate(f.fileno(), 0, size)
except AttributeError:
# Prior to version 3.3, Python does not provide fallocate
os.ftruncate(f.fileno(), size)
else:
self.shell.log.info("Writing %d bytes" % size)
while size > 0:
write_size = min(size, 1024)
f.write("\0" * write_size)
size -= write_size
except (OSError, IOError):
os.remove(filename)
raise ExecutionError("Could not expand file to %d bytes" % size)
except OverflowError:
raise ExecutionError("The file size is too large (%d bytes)" % size)
finally:
f.close()