我正在编写一个C ++程序,它将打印出大量(2-4GB)的文件。
我想确保驱动器上有足够的空间来保存文件,然后才开始编写它们。如果可能的话,我想保留这个空间。
这是在基于Linux的系统上进行的。
关于如何做到这一点的好方法?
答案 0 :(得分:7)
NAME
posix_fallocate - allocate file space
SYNOPSIS
int posix_fallocate(int fd, off_t offset, off_t len);
DESCRIPTION
The function posix_fallocate() ensures that disk space is allocated for
the file referred to by the descriptor fd for the bytes in the range
starting at offset and continuing for len bytes. After a successful
call to posix_fallocate(), subsequent writes to bytes in the specified
range are guaranteed not to fail because of lack of disk space.
编辑在注释中,表明您使用C ++流写入文件。据我所知,没有标准的方法从fd
获取文件描述符(std::fstream
)。
考虑到这一点,我会在此过程中将磁盘空间预分配作为一个单独的步骤。它会:
open()
文件; posix_fallocate()
; close()
文件。在打开fstream
之前,可以将其调成一个简短的函数。
答案 1 :(得分:1)
使用aix的答案(posix_fallocate()
),但由于您正在使用C ++流,因此需要一些黑客来获取流的文件描述符。
为此,请使用此处的代码:http://www.ginac.de/~kreckel/fileno/。
答案 2 :(得分:1)
如果您使用的是 C ++ 17 ,则应使用std::filesystem::resize_file