C语言 修改文件中的数据
三种方法:
(1)将文件中数据读入内存中,修改后,清空源文件,存入新数据。
(2)以读写的方式打开文件,将文件指针移动到要修改的地方,写入新数据。新数据将会覆盖掉旧数据。
(3)以读写的方式打开文件,将文件指针定位到需要修改数据的末尾,然后删除需要修改的数据(通过循环n次执行fputc(8,fp),直到清空需要修改的数据为止.
8为退格键对应的ascii)。
然后计算需要加入的新数据长度,通过fputc(32,fp)来添加空格到文件中(32为空格键的ascii).
然后根据指针位置,填入数据覆盖掉这些空格。
第一种方法适合数据量较小的情况,
后两种情况适合数据量较大的情况,但程序写起来麻烦,如果用心写代码,也用不了多久。呵呵。
关于这个问题,本人也没有什么好的方法。
提个建议:首先将后100个字符读入数组,内存访问肯定比文件访问要快
就是这块:
do
{
fscanf(fp,"%c",&mm); //逐行扫描
}
while(mm!='
'); //判断倒数第二行的换行符
另外若想改进,个人感觉文件的磁盘访问本身就很慢,可以考虑在文件不大时直接用一些内存操作
有三种方法可以实现,分别如下:
第1种、将文件中数据读入内存中,修改后,清空源文件,存入新数据。
第2种、以读写的方式打开文件,将文件指针移动到要修改的地方,写入新数据。新数据将会覆盖掉旧数据。
第3种、以读写的方式打开文件,将文件指针定位到需要修改数据的末尾,然后删除需要修改的数据(通过循环n次执行fputc(8,fp),直到清空需要修改的数据为止,8为退格键对应的ascii)。 然后计算需要加入的新数据长度,通过fputc(32,fp)来添加空格到文件中(32为空格键的ascii). 然后根据指针位置,填入数据覆盖掉这些空格。
注意:第1种方法适合数据量较小的情况,第2种、第3种适合数据量较大的情况。
提供一个参考代码,如下:
#include "stdio.h"
main()
{
FILE *in=fopen("f:\est.txt","r");
FILE *out=fopen("f:\\back.txt","w"); /*out是充当临时文件作用*/
int ch=0;
if(!in)
{
printf("cann't open test.txt
");
exit(1);
}
if(!out)
{
printf("cann't create back.txt
");
exit(1);
}
/*开始复制*/
while(!feof(in))
{
ch=fgetc(in);
if(ch=='a') ch='p';
fputc(ch,out);
}
fclose(in); fclose(out);
unlink("f:\est.txt"); /*删除test.txt*/
rename("f:\\back.txt","test.txt"); /*改名*/
printf("ok!!!!!!
");
}
#include<stdio.h>
struct stu{
int xuehao;
char xingming[10];
int chengji;
}stu1={101,"liyun",65};
void main(){
FILE *fp;
fp=fopen("d:\\stu.dat","w");
if(fp==NULL){
printf("文件创建失败!\n");
}
fwrite(&stu1,sizeof(struct stu),1,fp);
fclose(fp);
fp=fopen("d:\\stu.dat","r");
if(fp==NULL){
printf("文件读失败!\n");
}
struct stu tmp;
fread(&tmp,sizeof(struct stu),1,fp);
fclose(fp);
tmp.chengji=80;
fp=fopen("d:\\stu.dat","w");
if(fp==NULL){
printf("文件写失败!\n");
}
fwrite(&tmp,sizeof(struct stu),1,fp);
fclose(fp);
}
不用哪些重写文件、覆盖文件的方法
C语言中可以实现在文件的指定位置实现局部修改,而无需重写文件的其他部分
详细请见:CSDN网页链接
宋飘唯他: 如果文件较短,可以全部读到内存,修改后写入文件.如果文件很大,没有好办法,只能在新文件中写入原文件修改的内容,然后删除原来的文件,重新命名.
丰润区13242004594: 怎么用C语言修改文件内容 - ?
宋飘唯他: 用fopen打开文件,读入内容.然后修改掉想要修改的地方,再用fopen打开,把修改后的文件输出到文件里.
丰润区13242004594: c语言中如何修改文件中的部分内容? - ?
宋飘唯他: 普通都是将文件顺序读取,然后写到一个新的工作文件中,不修改的部分原样写,遇到要修改的部分就写改变后的数据,最后将原文件改个名字(比如叫xxx.bak),新文件改成原来文件的名称.
丰润区13242004594: c语言中怎么对已有文件中已有数据进行修改的:就是本来已经将一些数据写入文件,后来发现不对想对文件中 - ?
宋飘唯他: fopen() 改为: if((fp=fopen("1s.txt","w+"))==NULL) fputc(p,fp); 改为:fprintf(fp,"%d",p); 读语句前,加一句文件回绕到文件头: rewind(fp); ---------------- int main(){ FILE *fp; char read[1000]; char s; long p; if((fp=fopen("1s.txt","w+")...
丰润区13242004594: C语言如何修改文件内容? - ?
宋飘唯他: 将这些数据存入一个结构里面,在写入文件时按照这个结构的大小分配文件内存给他们,然后在改的时候,直接在文件中找到这个数据,改好后直接在那个位置写入就行了,不会覆盖内存的...行就顶一下哦,呵呵
丰润区13242004594: c语言中改动文件中的数据 - ?
宋飘唯他: fprintf ,fputc ,fputchar ,fputs向文件写入.fgetc,fgets从文件读出数据.百度上面几个函数.知道如何从文件读出值了,再将读出的值存在一个变量里,修改变量的值,在向文件写入.
丰润区13242004594: 怎样在c语言中修改已录入的文件信息,谢谢 - ?
宋飘唯他: 1. 用open打开文件,注意操作模式使用“修改”或者“添加” 2. 用write或者fprintf向文件中写入你的内容. 3. 用close关闭文件.
丰润区13242004594: C语言怎么修改文件内容 - ?
宋飘唯他: 提供思路: 先一组一组数据读取,然后进行比较,看是不是你要修改的数据(如果是你要修改的数据,那此时文件的指针已经指向下一组数据了),然后用fseek(fp,-sizeof(type),SEEK_CUR);使文件指针指向该数据块(fp为文件指针,sizeof...
丰润区13242004594: c语言程序修改 - ?
宋飘唯他: 有三种方法可以实现,分别如下:第1种、将文件中数据读入内存中,修改后,清空源文件,存入新数据.第2种、以读写的方式打开文件,将文件指针移动到要修改的地方,写入新数据.新数据将会覆盖掉旧数据.第3种、以读写的方式打开文...