我想知道如何在C中清除文件的内容。我知道可以使用truncate
来完成,但我找不到任何清楚描述如何的来源。
答案 0 :(得分:12)
其他答案解释了如何正确使用truncate
...但是如果你发现自己身处一个没有unistd.h
的非POSIX系统,那么最简单的事情就是打开写文件并立即关闭:
#include <stdio.h>
int main()
{
FILE *file = fopen("asdf.txt", "w");
if (!file)
{
perror("Could not open file");
}
fclose(file);
return 0;
}
使用"w"
打开文件(对于写入模式)“清空”文件,以便您可以开始覆盖它;立即关闭它然后产生一个0长度的文件。
答案 1 :(得分:5)
UNIX中的truncate()
调用只是:
truncate("/some/path/file", 0);
答案 2 :(得分:4)
虽然您可以只打开和关闭该文件,但truncate
调用是专为此用例设计的:
#include <unistd.h> //for truncate
#include <stdio.h> //for perror
int main()
{
if (truncate("/home/fmark/file.txt", 0) == -1){
perror("Could not truncate")
}
return 0;
}
如果您已经打开了该文件,则可以将该句柄与ftruncate
一起使用:
#include <stdio.h> //for fopen, perror
#include <unistd.h> //for ftruncate
int main()
{
FILE *file = fopen("asdf.txt", "r+");
if (file == NULL) {
perror("could not open file");
}
//do something with the contents of file
if (ftruncate(file, 0) == -1){
perror("Could not truncate")
}
fclose(file);
return 0;
}
答案 3 :(得分:1)
为了删除fie的内容,显然有一种基本的方法是以写入模式“w”打开文件,然后关闭它而不对其进行任何更改。
FILE *fp = fopen (file_path, "w");
fclose(fp);
这将删除文件中的所有数据,因为当您使用“w”模式打开已存在的文件时,文件将被删除并且打开一个具有相同名称的新文件进行写入,这将导致删除您的内容文件。
但在UNIX系统中存在truncate syscall,它专门用于同一目的并且非常易于使用:
truncate (filepath, 0);
如果您已经打开了文件,那么要么在执行截断之前关闭文件,要么使用ftruncate
ftruncate (file_path, 0);
答案 4 :(得分:1)
truncate(2)不是便携式呼叫。它只符合4.2BSD。虽然它可以在大多数* nix类型系统上找到,但我会说使用符合POSIX.1的例程,这些例程在大多数现代环境(包括Windows)中都得到了很好的保证。
所以这是符合POSIX.1-2000的代码片段:
int truncate_file(const char *name) {
int fd;
fd = open (name, O_TRUNC|O_WRONLY);
if ( fd >= 0 )
close(fd); /* open can return 0 as a valid descriptor */
return fd;
}