C 文件写入前检查硬盘内存

C 文件写入前检查硬盘内存,c,C,我有一个模拟行星轨道的程序。每次迭代需要64字节的内存(8个双倍),每个时间步的信息都会写入.txt文件。时间步长由用户选择,最终时间由用户选择。这允许我计算磁盘上所需的内存量。例如,最后时间为1000的10步给出100组信息,这意味着至少6400字节的内存 是否有一种方法可以使用此信息,在没有更好的单词的情况下,在允许程序写入文件之前检查驱动器是否有足够的空间,因为我希望防止将过大的文件写入磁盘。理想情况下,如果可能,这应该是标准C 如果您事先知道需要多少空间,您可以尝试获取所有需要的文件:

我有一个模拟行星轨道的程序。每次迭代需要64字节的内存(8个
双倍
),每个时间步的信息都会写入
.txt
文件。时间步长由用户选择,最终时间由用户选择。这允许我计算磁盘上所需的内存量。例如,最后时间为1000的10步给出100组信息,这意味着至少6400字节的内存


是否有一种方法可以使用此信息,在没有更好的单词的情况下,在允许程序写入文件之前检查驱动器是否有足够的空间,因为我希望防止将过大的文件写入磁盘。理想情况下,如果可能,这应该是标准C

如果您事先知道需要多少空间,您可以尝试获取所有需要的文件:

  • 打开文件并用空格填充,直到达到所需的确切大小
  • 打开文件并检查是否有错误
  • 文件指针指向开始并用实际数据覆盖内容
  • 如果刷新时出错,则所有文件都将被删除


    完成后,请关闭文件。

    不,仅使用标准C是不可能的,您需要使用特定于操作系统的系统调用。@nicomp您可以详细介绍如何执行此操作,或者链接一个可以解释的源吗?您可以预先分配足够大的文件,并从文件开头开始覆盖它。。顺便说一下,您是否正在使用小型磁盘开发某种嵌入式系统,或者您提到的数字只是示例,数据的实际大小将大得多(如在千兆字节范围内)?或者你希望创建数千个文件?例如,在两年内模拟哈雷彗星需要约4GB的空间。OP(和其他人)注意:用“空白”填充文件实际上是至关重要的,仅仅搜索到一个特定的位置是不够的,因为这可能会创建一个带有“洞”的所谓稀疏文件。文件大小将正确,但实际磁盘块的数量将不正确。@JoachimPileborg您是对的,这就是我没有使用fseek的原因,但我忘了解释为什么…我认为空格将是
    \0
    个字符?对于4GB的文件来说,这会花费过多的计算吗?在这里,我将过量定义为与程序本身的其余部分大小相似的大小,对于4GB文件来说,从实验开始大约需要300秒的CPU时间。@Hobojoe不是过多的计算,而是过多的IO时间,除非你做了一些虚拟的事情,实际上是
    fputc
    40亿次。严格来说,这可能是仅使用标准C实现的唯一方法。然而,在任何实际系统上,这都是荒谬的;您应该使用特定于系统的功能来检查可用磁盘空间的大小。