对一个文件用读写方式打开 fopen("...", "r+");首先读出文件里面的(9php.com)内容,处理完成后需要重新写入文件中。在重新写入的(9php.com)时候需要先清空原来文件里面的(9php.com)内容,如何实现此处的(9php.com)清空?
ps:原来使用先以读方式打开,读入缓冲后关闭文件,然后再以写打开,这样做两遍打开关闭,太浪费时间。
2008-8-14 14:40xi2008wang
ftruncate
2008-8-14 14:40happy_fish100
回复 #1 lukeden 的(9php.com)帖子
使用ftruncate可以清空文件,如:ftruncate(fileno(fp), 0);
#include
int ftruncate(int fildes, off_t length);
清空文件后,需要使用rewind或fseek将文件指针移到文件头。
2008-8-14 14:42yecheng_110
ftruncate
2008-8-14 14:42yecheng_110
LS上的(9php.com)两位好快:mrgreen:
居然到了4L:mrgreen:
2008-8-14 15:05lukeden
非常感谢楼上各位!!
在APUE上我看到这个函数,知道有这嚒个函数。我现在在win下,所以想找个C/C++的(9php.com)这样功能的(9php.com)函数
2008-8-14 16:49qliu00
以写的(9php.com)方式打开 写入空字符串:)
这样应该理论上可以的(9php.com)
2008-8-14 17:08jieao111
使用rewind或fseek将文件指针移到文件头
然后写进的(9php.com)就会自动覆盖
2008-8-14 18:00lukeden
原帖由 jieao111 于 2008-8-14 17:08 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=9057757&ptid=1243088][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
使用rewind或fseek将文件指针移到文件头
然后写进的(9php.com)就会自动覆盖 [/quote]
这样是可以覆盖了。但是后面没有被覆盖的(9php.com)部分依然存在! 如果原来的(9php.com)文件长度大于新写入的(9php.com)内容的(9php.com)长度, 后面的(9php.com)部分就覆盖不了
2008-8-14 18:25jieao111
回复 #9 lukeden 的(9php.com)帖子
你试过了吗,把代码发出来
2008-8-14 21:16lukeden
[quote]原帖由 jieao111 于 2008-8-14 18:25 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=9058389&ptid=1243088][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
你试过了吗,把代码发出来
试过了,确实存在这样的(9php.com)问题。一下是我的(9php.com)部分代码
FILE *fp = fopen(filepath, "r"); // 打开要处理的(9php.com)文件
if (fp == NULL)
{
printf("open file : %s error\t",filepath);
perror("because:");
return false;
}
if (NULL == read_file(fp, _buf)) // 读入文件到缓冲中
{
fclose(fp);
return false;
}
//过滤非正常文本
int size = filter_text(_buf, _buf);
//讲过滤后的(9php.com)文本写入原来文件,即更新文本内容
fseek(fp, 0L, SEEK_SET);
fwrite(_buf, 1, size, fp);
fclose(fp);