void delete_file_paragraphs(char* path,long head_offset,long trail_offset){
FILE* fp=fopen(path,"rb+");//打开被操作文件
/*先以长度不清零的方式打开被操作文件,用从头顺序读取的方式跳过要删除的区间,将读取到的数据存入缓存,删除被操作文件,以从头写入并创建文件的方式打开之前被操作文件的路径,将缓存数据写入文件,释放缓存*/
if(fp!=NULL){
fseek(fp,0,SEEK_END);//被操作文件偏移到文件尾
long file_trail=ftell(fp);//保存了被操作文件尾的偏移量,和文件长度
char* BUF_=(char*)malloc(sizeof(char)*(file_trail-head_offset));//建立缓存区用来保存文件数据
long count=0;//计数变量
long offset_CUR=0;//用于保存文件当前偏移量
for(fseek(fp,0,SEEK_SET);file_trail!=offset_CUR;count++){
if(offset_CUR==head_offset){
fseek(fp,(trail_offset-head_offset),SEEK_CUR);
}//跳过区间
fscanf(fp,"%c",BUF_+count);//将从文件获取到的数据存入缓冲区
offset_CUR=ftell(fp);//获取当前偏移量
}//将文件指定内容写入缓存
fclose(fp);//关闭文件
remove(path);//删除文件
fp=fopen(path,"w");//创建并打开文件
//fp=fopen("C:\\Users\\user\\Desktop\\新建文本文档30.txt","w");
for(count=0;count<file_trail-4;count++){
fprintf(fp,"%c",*(BUF_+count));//从缓存向文件写入数据
printf("%c",*(BUF_+count));
}//将缓存数据写入文件
free(BUF_);//释放缓存
fclose(fp);//关闭文件
}
}//根据段首和段尾的偏移量删除文件中的任意段落。形参1为被操作文件的路径,形参2为段落首部偏移量,形参3为段落尾部偏移量
/附上如上代码/
现象是执行前和执行后的文件内容没有变化,但是将第20和第21行改成——
//fp=fopen(path,"w");//创建并打开文件
fp=fopen("C:\Users\user\Desktop\新建文本文档30.txt","w");
——这样后,新建文本文档30.txt中的内容是正确的