免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: lukeden
打印 上一主题 下一主题

C语言文件清空操作 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-08-14 21:16 |只看该作者
原帖由 jieao111 于 2008-8-14 18:25 发表
你试过了吗,把代码发出来


        试过了,确实存在这样的问题。一下是我的部分代码
        FILE *fp = fopen(filepath, "r");        //        打开要处理的文件
        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);
        //讲过滤后的文本写入原来文件,即更新文本内容
        fseek(fp, 0L, SEEK_SET);
        fwrite(_buf, 1, size, fp);
        fclose(fp);

论坛徽章:
0
12 [报告]
发表于 2008-08-15 16:54 |只看该作者
我也试了试,确实发现了这个问题,也没找到c语言里清空文件内容的函数。基于某个特定的平台的话,可以找下响应的api。。

不过话又说过来了,你说你不愿意重新打开一次文件是因为效率的问题,可是你真的测量过优化后有多少时间上的提升吗,这值得吗。。
根据我的经验,重新打开并覆盖不会占用多少的时间,你可以实际的测量一下,在做决定。不过,在我看来,在一次打开文件的同时,又读又写,
会产生很多我们难以发现的bug。使我们程序的操作单一化,也是一个目标。

论坛徽章:
0
13 [报告]
发表于 2008-08-17 00:52 |只看该作者
使用rewind或fseek将文件指针移到文件头

然后写进的就会自动覆盖
但长度后面的就不会自动覆盖了

论坛徽章:
0
14 [报告]
发表于 2008-08-17 18:45 |只看该作者
原帖由 jieao111 于 2008-8-15 16:54 发表
我也试了试,确实发现了这个问题,也没找到c语言里清空文件内容的函数。基于某个特定的平台的话,可以找下响应的api。。

不过话又说过来了,你说你不愿意重新打开一次文件是因为效率的问题,可是你真的测量过 ...

谢谢! 我没有做测试!根据经验打开关闭应该是浪费时间的操作。个我也认为程序的功能应该单一,不应该太复杂。
我的程序对时间的要求不高,打开关闭两遍也没什么。我只是想到了这个问题,想请教下,是不是有这样的功能的c函数我没有找到

论坛徽章:
0
15 [报告]
发表于 2008-08-17 18:55 |只看该作者

回复 #12 jieao111 的帖子

读写同时会出现什么问题呢?请教

论坛徽章:
0
16 [报告]
发表于 2008-08-17 19:27 |只看该作者

回复 #15 fengqd 的帖子

具体问题也记不清了,以前在论坛上有人提问过文件的问题,最后出错的原因就是他又读又写

论坛徽章:
0
17 [报告]
发表于 2008-08-17 19:36 |只看该作者
先删除文件,再建立,再写呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP