检查是否有足够的磁盘空间来保存文件;保留它

时间:2012-02-28 19:54:31

标签: c++ linux file-io

我正在编写一个C ++程序,它将打印出大量(2-4GB)的文件。

我想确保驱动器上有足够的空间来保存文件,然后才开始编写它们。如果可能的话,我想保留这个空间。

这是在基于Linux的系统上进行的。

关于如何做到这一点的好方法?

3 个答案:

答案 0 :(得分:7)

看看posix_fallocate()

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)。

考虑到这一点,我会在此过程中将磁盘空间预分配作为一个单独的步骤。它会:

  1. open()文件;
  2. 使用posix_fallocate();
  3. close()文件。
  4. 在打开fstream之前,可以将其调成一个简短的函数。

答案 1 :(得分:1)

使用aix的答案(posix_fallocate()),但由于您正在使用C ++流,因此需要一些黑客来获取流的文件描述符。

为此,请使用此处的代码:http://www.ginac.de/~kreckel/fileno/

答案 2 :(得分:1)

如果您使用的是 C ++ 17 ,则应使用std::filesystem::resize_file

shown in this post