如何在C中设置文件的大小?我会这样做后,我fopen?
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
iaqfqrcu2#
令人惊讶的是,还没有人说过这一点-但简单的答案是ftruncate,它可以用来增加文件的长度,以及减少它。如果增加额外的文件数据设置为零字节。
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。
fflush
kzipqqlq3#
在 plain standard C 中,唯一的方法是在 * 以二进制模式 * 打开文件后将x字节写入文件,即使这样,该标准也允许实现在末尾追加任意数量的空字节而不告诉您。另一方面,有了POSIX,就很容易了。只需调用ftruncate(fileno(f), x);
x
ftruncate(fileno(f), x);
yuvru6vn4#
你能澄清一下你的问题吗?您的意思是您正尝试创建一个具有特定大小的新文件,还是您有一个现有的文件并希望截断它?截断一个现有的文件是很容易的(在Unix变体中,无论如何)--使用truncate()函数。创建新文件-我不知道你到底想问什么。是否要创建一个空的但具有特定大小的文件?你为什么要这么做?其他人已经描述过的稀疏文件技术(fseek + fputc)创建了一个“稀疏”文件,它几乎不占用磁盘空间,但是(如果您读取它)会返回全0。
lc8prwob5#
有很多方法可以做到这一点:1 .仅限C/C++您可以移动文件指针(使用fseek())到您想要的大小,并写入任何内容。这将把文件的大小设置为文件指针的位置。但是,这种方法只允许您增加文件的大小。不是不让你缩小。2 .(Windows)您可以使用CreateFile()创建文件,然后设置文件指针位置并使用SetEndOfFile()设置实际大小。Windows中的此方法也可用于缩小文件的大小。3 .(Linux)要缩小文件的大小,请调用ftruncate(fileno(f),size)或truncate(path,size)。
fseek()
CreateFile()
SetEndOfFile()
ftruncate(fileno(f),size)
truncate(path,size)
5条答案
按热度按时间6vl6ewon1#
是的,你可以在fopen之后做--你可以创建一个稀疏文件
字符串
这将为您创建一个X Byte的文件,用于您所需要的任何内容,在本例中为1 MiB
iaqfqrcu2#
令人惊讶的是,还没有人说过这一点-但简单的答案是
ftruncate
,它可以用来增加文件的长度,以及减少它。如果增加额外的文件数据设置为零字节。字符串
请注意,如果您之前写入的数据超出了要截断的长度,则首先需要
fflush
它(请参见此处:ftruncate on file opened with fopen)的值。ftruncate
信息:http://linux.die.net/man/2/ftruncate。kzipqqlq3#
在 plain standard C 中,唯一的方法是在 * 以二进制模式 * 打开文件后将
x
字节写入文件,即使这样,该标准也允许实现在末尾追加任意数量的空字节而不告诉您。另一方面,有了POSIX,就很容易了。只需调用
ftruncate(fileno(f), x);
yuvru6vn4#
你能澄清一下你的问题吗?您的意思是您正尝试创建一个具有特定大小的新文件,还是您有一个现有的文件并希望截断它?
截断一个现有的文件是很容易的(在Unix变体中,无论如何)--使用truncate()函数。
创建新文件-我不知道你到底想问什么。是否要创建一个空的但具有特定大小的文件?你为什么要这么做?其他人已经描述过的稀疏文件技术(fseek + fputc)创建了一个“稀疏”文件,它几乎不占用磁盘空间,但是(如果您读取它)会返回全0。
lc8prwob5#
有很多方法可以做到这一点:
1 .仅限C/C++
您可以移动文件指针(使用
fseek()
)到您想要的大小,并写入任何内容。这将把文件的大小设置为文件指针的位置。但是,这种方法只允许您增加文件的大小。不是不让你缩小。
2 .(Windows)
您可以使用
CreateFile()
创建文件,然后设置文件指针位置并使用SetEndOfFile()
设置实际大小。Windows中的此方法也可用于缩小文件的大小。
3 .(Linux)
要缩小文件的大小,请调用
ftruncate(fileno(f),size)
或truncate(path,size)
。