首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于文件内容部分替换的有关问题

2012-03-24 
关于文件内容部分替换的问题!想在文件中(内容比较多)找到一个字符串A,并用另一个字符串B替代它,由于知识学

关于文件内容部分替换的问题!
想在文件中(内容比较多)找到一个字符串A,并用另一个字符串B替代它,由于知识学的不好,遇到了麻烦.
    第一在文件里查到A时,文件指针已经指向了A的末尾,如果用B替代它,必须回退,但我此时并不想立即替换,而是只想记录下来此时文件指针的位置,请问用什么函数?
    第二.由于A和B长度的不同,直接替换,会产生多出一空行或者删除了其他字符的现象,请问如何处理比较简便
    第三.文件指针一次移动一个字节吗(文件里有数字也有字符)
请各位指点一下,谢谢!


[解决办法]
必须重建文件。
[解决办法]
文件数据可以读到内存中,然后替换,再存盘
另外,文件以“读写”方式打开时,在读文件和写文件时,
要注意一些限制,操作不当有可能会损坏文件内容
[解决办法]
文本覆盖、插入、修改,简单的示例一下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp;
char *insert = "EE,EE,EE, ", tmp[256]={0};
int pos, i;

/*test.txt文件内容:01,00,00,00,0E,00,00,00,00,00,00,E1,E2,00,00,00,00*/
fp = fopen( "test.txt ", "r+ ");

/*1、等长覆盖*/
fseek(fp, 12, 1);
fprintf(fp, "0F "); /*直接写入等长度的数据就可以完成覆盖*/

/*2、E2后插入“EE,EE,EE,” */
fseek(fp, 25, 1);
pos = ftell(fp); /*插入位置*/
fgets(tmp, 256, fp); /*把后面的数据缓存*/
fseek(fp, pos, 0); /*移动到插入位置*/
fprintf(fp, insert); /*插入,就是写入数据*/
fprintf(fp, tmp); /*把原来的数据再写回来, 完成*/

/*3、01读取后++两次,并重新写回文件*/
rewind(fp);
fscanf(fp, "%x ", &i); /*读取数据*/
i = i+2; /* +2 */
fseek(fp, -2, 1); /*调整指针*/
fprintf(fp, "%02x ", i); /*写文件*/

fclose(fp);
system( "PAUSE ");
return 0;
}
[解决办法]
函数申明: long ftell(FILE *fp)
函数用途: 得到文件位置指示器的数值
头 文 件: stdio.h
输入参数: fp:文件流指针
返 回 值: 如操作正确,返回文件位置数值,否则返回-1

函数申明: int fputs(char *str, file *fp)
函数用途: 在文件的当前位置写入一个字符串
头 文 件: stdio.h
输入参数: fp: 文件指针;str:要写入的字符串
返 回 值: 操作正确时返回写入的字符,错误返回EOF
[解决办法]
文件大的话,就用MD5计算每5M的值,发现不同就替换掉。不知道这样可以不
[解决办法]
先将文件重命名,然后生成一个新文件,应该就可以搞定了。

热点排行