【发布时间】:2011-10-15 00:57:26
【问题描述】:
如何在 c 中设置文件的大小?我打开后会这样做吗?
【问题讨论】:
如何在 c 中设置文件的大小?我打开后会这样做吗?
【问题讨论】:
是的,你会在 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 Byte 文件以满足您的需要,在这种情况下它是 1MiB
【讨论】:
很惊讶没有人这么说 - 但简单的答案是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。
【讨论】:
普通标准 C 中的唯一方法是在打开文件后将x 字节写入文件以二进制模式,即使这样,标准也允许实现在不告诉你的情况下将任意数量的空字节附加到末尾。
另一方面,使用 POSIX,这很容易。只需拨打ftruncate(fileno(f), x);
【讨论】:
你能澄清你的问题吗?您的意思是您正在尝试创建一个具有特定大小的新文件,或者您有一个现有文件并且想要截断它?
截断现有文件很容易(无论如何,在 Unix 变体中)——使用 truncate() 函数。
对于创建新文件 - 我不确定您要问什么。您想创建一个空的但具有特定大小的文件吗?为什么你需要这样做?其他人描述的稀疏文件技术(fseek + fputc)创建了一个“稀疏”文件,几乎不占用磁盘空间,但(如果您阅读它)返回全 0。
【讨论】:
有很多方法可以做到这一点:
1 .仅限 C/C++
您可以将文件指针(使用fseek())移动到您想要的大小,然后写入任何内容。这会将文件的大小设置为文件指针的位置。
但是,这种方法只能让您增加文件的大小。它不会让你缩小它。
2 。 (视窗)
您可以使用CreateFile()制作文件,然后设置文件指针位置并使用SetEndOfFile()设置实际大小。
此方法在 Windows 中也可用于缩小文件的大小。
3 . (Linux)
我不确定这里,但除了 fseek + fwrite 之外,posix 中可能有一些东西可以做到这一点。
【讨论】: