如何创建“x”大小的文件?

时间:2011-10-15 00:57:26

标签: c file-io

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

5 个答案:

答案 0 :(得分: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);
}

那应该为你需要的任何东西创建一个X字节文件,在这种情况下它是1MiB

答案 1 :(得分:10)

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

FILE *fp=fopen("myfile", "w");
ftruncate(fileno(fp), 1024*1024);
fclose(fp);

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

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

答案 2 :(得分:5)

普通标准C 的唯一方法是在二进制模式下打开后将x字节写入文件,即使这样,标准允许一个实现,可以在不告诉你的情况下将任意数量的空字节附加到最后。

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

即可

答案 3 :(得分:2)

你能澄清一下你的问题吗?你的意思是你试图创建一个具有特定大小的新文件,或者你有一个现有的文件而你想截断它?

截断现有文件很简单(无论如何都是Unix变体) - 使用truncate()函数。

创建新文件 - 我不确定你要问的是什么。您想创建一个空的但具有特定大小的文件吗?你为什么要这么做?其他人描述的稀疏文件技术(fseek + fputc)创建了一个“稀疏”文件,它几乎不占用磁盘上的空间,但是(如果你读取它)会返回所有0。

答案 4 :(得分:1)

有很多方法可以做到这一点:

1。仅限C / C ++

您可以将文件指针(使用fseek())移动到所需的大小,然后编写任何内容。这会将文件的大小设置为文件指针的位置。

但是,此方法只允许您增加文件的大小。它不会让你缩小它。

2。 (Windows)中

您可以使用CreateFile()创建文件,然后设置文件指针位置并使用SetEndOfFile()设置实际大小。

Windows中的此方法也可用于缩小文件的大小。

3。 (Linux)的

我不确定这里,但是除了fseek + fwrite之外,posix中可能会有其他内容。