C 如何创建";x";尺寸?

C 如何创建";x";尺寸?,c,file-io,C,File Io,如何在c中设置文件的大小?我会在fopen之后执行此操作吗?是的,您会在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

如何在c中设置文件的大小?我会在fopen之后执行此操作吗?

是的,您会在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);
}
#包括
内部主(空){
int X=1024*1024-1;
FILE*fp=fopen(“myfile”,“w”);
fseek(fp,X,SEEK_集);
fputc('\0',fp);
fclose(fp);
}

这应该为您需要的任何内容创建一个X字节的文件,在这种情况下,它是1MiB,有很多方法可以做到这一点:

一,。仅限C/C++语言

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

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

二,。(窗口)

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

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

三,。(Linux)


这里我不确定,但是posix中可能有一些东西可以做这件事,而不仅仅是
fseek
+
fwrite

你能澄清你的问题吗?您的意思是您正在尝试创建一个具有特定大小的新文件,还是您有一个现有文件并希望截断它

截断现有文件很容易(无论如何,在Unix变体中)——使用truncate()函数


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

在普通标准C中,唯一的方法是在以二进制模式打开文件后将
x
字节写入该文件,即使如此,该标准允许实现在不通知您的情况下将任意数量的空字节追加到末尾


另一方面,使用POSIX。只需调用
ftruncate(fileno(f),x)

还没有人对此表示惊讶,但简单的答案是
ftruncate
,它可以用来增加和减少文件的长度。如果增加额外文件数据,则设置为零字节

FILE *fp=fopen("myfile", "w");
ftruncate(fileno(fp), 1024*1024);
fclose(fp);
请注意,如果以前写入的数据超过了要截断的长度,则首先需要
fflush
it(请参见此处:)


ftruncate
info:。

看看答案,它是8Mb的8倍。加上一个byte.WTF——从什么时候开始,fseek是以位为单位工作的——给我命名一个以位为参数的ISO C99函数——我想不出一个。但是你说文件将是1Mb,而实际上是1Mb。@Ignacio Vazquez Abrams,实际上它没有向你说明“b”和“b”之间的打字错误比我在MeagBits中提供解决方案的情况更有可能。Mb和MiB都意味着不同的事情。此示例创建大小为1 MiB的文件。不是1MB或1MB。我想设置文件的大小。很像Adrian建议我“相信”。对不起,我还是不明白-当我要求你澄清“我如何设置文件大小”的意思时,你重复了“我想设置文件大小”。你能澄清你的确切意思,并更详细地描述你在做什么吗?创建一个空的但具有特定大小的文件。对不起,我说的含糊不清response@Questioneer:你说的“空”是什么意思?通常,大小非零的文件不是空的。一个文件(在典型系统上)是一个由零个或多个字节组成的序列,每个字节都有一个值。我仍然不完全清楚“空但有特定大小”是什么意思。你是说它包含所有0吗?你是说稀疏文件吗?您是指磁盘空间已分配的文件吗?我们需要更多的背景来明智地回答这个问题,比你们早两年。尽管如此,我还是投了赞成票