如何创建"x"大小的文件?

Que*_*eer 9 c file-io

如何在c中设置文件的大小?我打开后会这样做吗?

Adr*_*ish 13

是的,你会在fopen之后这样做 - 你可以创建一个稀疏文件

#include <stdio.h>
int main(void) {
        int X = 1024 * 1024 - 1;
        FILE *fp = fopen("myfile", "w");
        fseek(fp, X , SEEK_SET);
        fputc('\0', fp);
        fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)

这应该为你创建一个X字节文件,无论你需要什么,在这种情况下它是1MiB

  • 我想不出一个.但你说文件将是1Mb,而实际上它将是1MB. (4认同)
  • @Ignacio Vazquez-Abrams真的没有告诉你'b'和'B'之间的拼写错误比我在MeagBits中提供解决方案的情况更可能. (4认同)
  • WTF - 因为fseek在bit中工作的时候 - 给我起一个ISO C99函数,它以位为参数 (3认同)
  • 这是8Mb的8倍.加一个字节. (2认同)
  • Mb MB和MiB都意味着不同的东西.此示例创建一个大小为1 MiB的文件.不是1MB或1Mb. (2认同)

Hug*_*otl 10

很惊讶没有人说过这个 - 但简单的答案是ftruncate,它可以用来增加文件的长度并减少它.如果增加额外文件数据设置为零字节.

FILE *fp=fopen("myfile", "w");
ftruncate(fileno(fp), 1024*1024);
fclose(fp);
Run Code Online (Sandbox Code Playgroud)

请注意,如果您之前写的数据超出了要截断的长度,则首先需要fflush它(请参见此处:ftruncate on file with fopen).

ftruncate信息:http://linux.die.net/man/2/ftruncate.


R..*_*R.. 5

普通标准C中唯一的方法是在以二进制模式x打开文件后将字节写入文件,即使这样,标准也允许实现在不告诉您的情况下向末尾附加任意数量的空字节.

另一方面,使用POSIX,很容易.只需致电ftruncate(fileno(f), x);