#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <windows.h> int ModifyFileData(char *file, unsigned long ulPosition, unsigned long ulDelBytes, char *buf, unsigned long ulAddBytes) { FILE *fp = NULL; FILE *tmp = NULL; char tmpFile[1024] = {0}; char tmpBuf[10240] = {0}; unsigned long ulCnt = 0; unsigned long i = 0; sprintf(tmpFile, "%s.%lu", file, (unsigned long)time((long *)&ulCnt)); fp = fopen(file, "r"); if(NULL == fp) return -1; tmp = fopen(tmpFile, "w"); if(NULL == tmp) { fclose(fp); return -1; } //copy ulPosition bytes data to tmp file for(i=0; i<ulPosition/10240; i++) { ulCnt = fread(tmpBuf, 1, 10240, fp); fwrite(tmpBuf, 1, ulCnt, tmp); } ulCnt = fread(tmpBuf, 1, ulPosition % 10240, fp); fwrite(tmpBuf, 1, ulCnt, tmp); //write new content fread(tmpBuf, 1, ulDelBytes, fp); fwrite(buf, 1, ulAddBytes, tmp); //write left content while(!feof(fp)) { ulCnt = fread(tmpBuf, 1, 10240, fp); fwrite(tmpBuf, 1, ulCnt, tmp); } //write tmp file to old fclose(fp); fclose(tmp); fp = fopen(file, "w"); if(NULL == fp) return -1; tmp = fopen(tmpFile, "r"); if(NULL == tmp) { fclose(fp); return -1; } while(!feof(tmp)) { ulCnt = fread(tmpBuf, 1, 10240, tmp); fwrite(tmpBuf, 1, ulCnt, fp); } fclose(fp); fclose(tmp); DeleteFile(tmpFile); return 0; }