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

C语言文本操作fwrite,如和对一个字节反复修改?该怎么处理

2012-04-21 
C语言文本操作fwrite,如和对一个字节反复修改???C/C++ code#define HisALLFile/flash/hislog.txt/***目

C语言文本操作fwrite,如和对一个字节反复修改???

C/C++ code
#define HisALLFile                "/flash/hislog.txt"/***目的:对文件hislog.txt的某个指定位置进行字节改写**测试:对hislog.txt文件的0位置反复写入'1'和 '2'*****/void testtxtwrite(void){    FILE *fp=NULL;    int i=0;    size_t n=0;    long sek=0;    unsigned char temp='1';    unsigned char temp1='2';    unsigned char temp3=0;    fp=fopen(HisALLFile, "ab");//不知此处应该已何种方式打开文件??    if (fp == NULL) return -1;    for (i=0; i<10; i++) {        fseek(fp, 0, SEEK_SET);//移动文件读取位置到 从开始处的0偏移        sek=0;        sek=ftell(fp);//打印当前读取位置        printf("sek1=0x%lx\n", sek);                fwrite(&temp, 1, 1, fp);        sek=0;        sek=ftell(fp);//取得执行写操作后的文件读取位置        printf("T1:  sek=0x%lx  Da=0x%x\n", sek, temp);//打印当前读取位置,及写入的数据                        fseek(fp, 0, SEEK_SET);//移动文件读取位置到 从开始处的0偏移        sek=0;        sek=ftell(fp);        printf("sek2=0x%lx\n", sek);        temp3=0;        fread(&temp3, 1, 1, fp);        sek=0;        sek=ftell(fp);        printf("T2:  sek=0x%lx  Da=0x%x\n", sek, temp3);//打印当前读取位置,及读取的数据        fseek(fp, 0, SEEK_SET);        sek=0;        sek=ftell(fp);        printf("sek3=0x%lx\n", sek);                fwrite(&temp1, 1, 1, fp);        sek=0;        sek=ftell(fp);        printf("T3:  sek=0x%lx  Da=0x%x\n", sek, temp1);                fseek(fp, 0, SEEK_SET);        sek=0;        sek=ftell(fp);        printf("sek4=0x%lx\n", sek);        temp3=0;        fread(&temp3, 1, 1, fp);        sek=0;        sek=ftell(fp);        printf("T4:  sek=0x%lx  Da=0x%x\n", sek, temp3);        printf("\n\n");    }    fclose(fp);    }


问题:本意是对位置0处,反复改写1和2,文件的大小也应始终为1字节,但是结果发现文件大小为20字节,
刚好为10x2次写,不知道原因为何,每次写操作都有将读写位置fseek到0位置啊??

下面是打印数据:

sek1=0x0
T1: sek=0x1 Da=0x31
sek2=0x0
T2: sek=0x0 Da=0x0 //应该读出是31啊
sek3=0x0
T3: sek=0x2 Da=0x32
sek4=0x0
T4: sek=0x0 Da=0x0


sek1=0x0
T1: sek=0x3 Da=0x31
sek2=0x0
T2: sek=0x0 Da=0x0
sek3=0x0
T3: sek=0x4 Da=0x32
sek4=0x0
T4: sek=0x0 Da=0x0


sek1=0x0
T1: sek=0x5 Da=0x31
sek2=0x0
T2: sek=0x0 Da=0x0
sek3=0x0
T3: sek=0x6 Da=0x32
sek4=0x0
T4: sek=0x0 Da=0x0


sek1=0x0
T1: sek=0x7 Da=0x31
sek2=0x0
T2: sek=0x0 Da=0x0
sek3=0x0
T3: sek=0x8 Da=0x32
sek4=0x0
T4: sek=0x0 Da=0x0


sek1=0x0
T1: sek=0x9 Da=0x31
sek2=0x0
T2: sek=0x0 Da=0x0
sek3=0x0
T3: sek=0xa Da=0x32
sek4=0x0
T4: sek=0x0 Da=0x0


sek1=0x0
T1: sek=0xb Da=0x31
sek2=0x0
T2: sek=0x0 Da=0x0
sek3=0x0
T3: sek=0xc Da=0x32
sek4=0x0
T4: sek=0x0 Da=0x0


sek1=0x0
T1: sek=0xd Da=0x31
sek2=0x0
T2: sek=0x0 Da=0x0
sek3=0x0
T3: sek=0xe Da=0x32
sek4=0x0
T4: sek=0x0 Da=0x0


sek1=0x0
T1: sek=0xf Da=0x31
sek2=0x0
T2: sek=0x0 Da=0x0
sek3=0x0
T3: sek=0x10 Da=0x32
sek4=0x0
T4: sek=0x0 Da=0x0


sek1=0x0
T1: sek=0x11 Da=0x31
sek2=0x0
T2: sek=0x0 Da=0x0
sek3=0x0
T3: sek=0x12 Da=0x32
sek4=0x0
T4: sek=0x0 Da=0x0


sek1=0x0
T1: sek=0x13 Da=0x31
sek2=0x0
T2: sek=0x0 Da=0x0
sek3=0x0
T3: sek=0x14 Da=0x32
sek4=0x0
T4: sek=0x0 Da=0x0

[解决办法]
用"r+b"的方式打开文件吧,"a"表示是在文件末尾添加。
[解决办法]
应该用rw方式打开
------解决方案--------------------


探讨
用"r+b"的方式打开文件吧,"a"表示是在文件末尾添加。

热点排行