【问题未解决】文件读写缓冲清理 fflush()

最近写了一个用Mini-XML写XML小程序,读取原来XML内容然后进行修改。


但是发现每次写XML时,没有将原来的文件内容全部清除,只是将新的内容覆盖上去。

纠结了N久才以为是用了fopen函数,fopen是带缓冲的,没有清理文件缓冲就写文件是不行的。

加上fflush(fp)或 flushall(),问题还是没解决!!


目前笨拙方法是,先以读方式读出,关闭文件,再以写方式写入新内容。


求助~~

#include <mxml.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv)
{
	FILE *fp;
	mxml_node_t *tree;
	mxml_node_t *node;
	char* szAttr;

	fp = fopen(argv[1], "r+");
	if (NULL == fp)
	{
		printf("Error:Open file '%s' failed!\n", argv[1]);
		return -1;
	}

	tree = mxmlLoadFile(NULL, fp, MXML_TEXT_CALLBACK);
	if ( NULL == tree )
	{
		printf("Error: Load xml failed!\n");
		fclose(fp);
		return -1;
	}

	node = mxmlFindElement(tree, tree, "node", NULL,
		NULL, MXML_DESCEND);
	if ( NULL == node )
	{
		printf("Error: Can't find node!\n");
		fclose(fp);
		return -1;
	}
	
	if ( 0==mxmlSetText(node, 0, "10.0") )
	{
		printf("Set text successfully!\n");
	}
	else
	{
		printf("Error:Set text failed!\n");
	}

	/*node = mxmlFindElement(tree, tree,	"node",	NULL, NULL,	MXML_DESCEND);
	for ( ;node != NULL;	node = mxmlFindElement(node, tree,	"node",	NULL, NULL,	MXML_DESCEND))
	{

	}*/

	/*
	fclose(fp);
	fp = fopen(argv[1], "w");
	if (NULL == fp)
	{
		printf("Error:Open file '%s' failed!\n", argv[1]);
		return -1;
	}*/
	fflush(fp);

	if ( 0==mxmlSaveFile(tree, fp, MXML_NO_CALLBACK) )
	{
		printf("Save xml successfully!\n");
	}
	else
	{
		printf("Error:Save xml failed!\n");
	}

	fclose(fp);
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值