文件的读写、某一行的修改与删除,一直是个问题,最近遇到的比较多,整理一下
#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;
}fseek 用于二进制方式打开的文件,移动文件读写指针位置.
通常文件打开后,读写位置按先后顺序.但有时你想变动读写位置,例如重新从某处起,再读一次。
fseek有3个参数,函数原型:
int fseek( FILE *stream, longoffset, int origin );
第一个是文件流,第3个是指针零点位置,第2个是把指针移动到的地点.
第3个参数取值等于下列3个之1
SEEK_CUR -- 零点为当前指针位置
SEEK_END -- 零点为文件尾
SEEK_SET -- 零点为文件起始
第2个参数为偏移量,字节数,长整型.
fseek(in,-1L,1);
-- 文件流in, 零点为当前指针位置,SEEK_CUR 就是 1, -1L -- 文件指针回退1个字节.
4081

被折叠的 条评论
为什么被折叠?



