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

0ve6wy6x  于 2023-08-03  发布在  其他
关注(0)|答案(5)|浏览(147)

如何在C中设置文件的大小?我会这样做后,我fopen?

6vl6ewon

6vl6ewon1#

是的,你可以在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的文件,用于您所需要的任何内容,在本例中为1 MiB

iaqfqrcu

iaqfqrcu2#

令人惊讶的是,还没有人说过这一点-但简单的答案是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

kzipqqlq

kzipqqlq3#

plain standard C 中,唯一的方法是在 * 以二进制模式 * 打开文件后将x字节写入文件,即使这样,该标准也允许实现在末尾追加任意数量的空字节而不告诉您。
另一方面,有了POSIX,就很容易了。只需调用ftruncate(fileno(f), x);

yuvru6vn

yuvru6vn4#

你能澄清一下你的问题吗?您的意思是您正尝试创建一个具有特定大小的新文件,还是您有一个现有的文件并希望截断它?
截断一个现有的文件是很容易的(在Unix变体中,无论如何)--使用truncate()函数。
创建新文件-我不知道你到底想问什么。是否要创建一个空的但具有特定大小的文件?你为什么要这么做?其他人已经描述过的稀疏文件技术(fseek + fputc)创建了一个“稀疏”文件,它几乎不占用磁盘空间,但是(如果您读取它)会返回全0。

lc8prwob

lc8prwob5#

有很多方法可以做到这一点:
1 .仅限C/C++
您可以移动文件指针(使用fseek())到您想要的大小,并写入任何内容。这将把文件的大小设置为文件指针的位置。
但是,这种方法只允许您增加文件的大小。不是不让你缩小。
2 .(Windows)
您可以使用CreateFile()创建文件,然后设置文件指针位置并使用SetEndOfFile()设置实际大小。
Windows中的此方法也可用于缩小文件的大小。
3 .(Linux)
要缩小文件的大小,请调用ftruncate(fileno(f),size)truncate(path,size)

相关问题