如何在c中设置文件的大小?我打开后会这样做吗?
答案 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中可能会有其他内容。