求助:以rb+打开文件,读取到文件结尾,开始写文件,则写文件失败,不知道为什么
以下是源码
本意是想打开一个二进制文件,在其尾部加入一些特定信息如程序名称 版本号 校验值等
但是每次写文件都会返回失败,不知道为什么,获取的错误码是32
请各位帮忙分析分析,原因是什么,在此谢过了
//返回值 0:失败 1:成功int fill_bin_file(char *filename,unsigned char file_data,long size){ FILE *fp; long cur_size; unsigned char val; int j; //============打开文件 fp = fopen(filename,"rb+"); if (fp == NULL) { printf("open file fail\n"); return 0; } //==========获取文件的当前长度 if (fseek(fp,0,SEEK_END)!=0) { printf("seek file fail\n"); fclose(fp); return 0; } cur_size = ftell(fp); //==========校验文件长度 if ((cur_size == -1)||(cur_size+32 >= size)) { printf("get file size fail\n"); fclose(fp); return 0; } printf("file current size is : %u\n",cur_size); //=========计算从文件开始到当前位置的异或校验 crc_val = 0; j=0; if (fseek(fp,0,SEEK_SET)!=0) { printf("seek file fail\n"); fclose(fp); return 0; } while(j<cur_size) { if (fread(&val,1,1,fp)!=1) { printf("read file error\n"); fclose(fp); return 0; } crc_val ^= val; j++; } //===========填充文件 while (cur_size < size-32) { if(fwrite(&file_data,1,1,fp)!=1) { printf("write file fail\n"); fclose(fp); return 0; } cur_size++; crc_val ^= file_data; } //==========填写后缀信息 //填写程序名 for (j=0;j<10;j++) { fwrite(&dev_type[j],1,1,fp); cur_size++; crc_val ^= dev_type[j]; } //填写版本 for (j=0;j<10;j++) { fwrite(&version[j],1,1,fp); cur_size++; crc_val ^= version[j]; } //填写保留 for (j=0;j<11;j++) { fwrite(&file_data,1,1,fp); cur_size++; crc_val ^= file_data; } //填写校验 fwrite(&crc_val,1,1,fp); fclose(fp); return 1;}