如何在C中截断文件?
我使用C来将一些数据写入文件。 我想擦除写在文件中的以前的文本,以防它比我现在写的更长。 我想减小文件的大小或截断,直到结束。 我该怎么做?
如果你想保存文件的以前的内容达到一定的长度(一个大于零的长度,其他答案提供),那么POSIX提供作业的truncate()
和ftruncate()
函数。
#include <unistd.h> int ftruncate(int fildes, off_t length); int truncate(const char *path, off_t length);
名称表示主要目的 – 缩短文件。 但是,如果指定的长度比上一个长度长,则文件会增加(零填充)到新的大小。 请注意, ftruncate()
在文件描述符上工作,而不是FILE *
; 你可以使用:
if (ftruncate(fileno(fp), new_length) != 0) ...error handling...
但是,您应该知道,将文件stream( FILE *
)和文件描述符( int
)访问混合到单个文件容易导致混淆 – 请参阅有关这些问题的注释。 这应该是最后的手段。
不过,为了达到你的目的,你可能需要截断公开,为此,其他人提供的选项就足够了。
在Windows系统中,没有头<unistd.h>
但是可以通过使用截断文件
_chsize( fileno(f), size);
这是你的操作系统的一个function。 标准的POSIX方法是:
open("file", O_TRUNC | O_WRONLY);
如果这是在UNIX的某种风格下运行的,这些API应该是可用的:
#include <unistd.h> #include <sys/types.h> int truncate(const char *path, off_t length); int ftruncate(int fd, off_t length);
根据我的Linux机器上的“man truncate”,这些符合POSIX标准。 请注意,如果传递的长度大于当前长度,这些调用实际上会增加文件(!)的大小。
如果你想截断整个文件,打开文件写作为你做。 否则,您必须打开文件进行读取,并将要保留的文件的各个部分读入临时variables,然后将其输出到任何需要的位置。
截断整个文件:
FILE *file = fopen("filename.txt", "w"); //automatically clears the entire file for you.
截断文件的一部分:
FILE *inFile("filename.txt", "r"); //read in the data you want to keep fclose(inFile); FILE *outFile("filename.txt", "w"); //output back the data you want to keep into the file, or what you want to output.
<编辑>
嗯,你编辑了你的文章,你正在使用C.当你打开文件时,打开它的模式“w +”就像这样,它会截断准备写作:
FILE* f = fopen("C:\\gabehabe.txt", "w+"); fclose(file);
</编辑>
要用C ++截断文件,只需使用ios_base :: trunc作为文件模式截断文件,就可以简单地为文件创build一个ofstream对象,如下所示:
ofstream x("C:\\gabehabe.txt", ios_base::trunc);