C语言 修改文件中的数据

作者&投稿:边伏 (若有异议请与网页底部的电邮联系)
在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语言中如何对文件中的某些数据进行修改? -
宋飘唯他: 如果文件较短,可以全部读到内存,修改后写入文件.如果文件很大,没有好办法,只能在新文件中写入原文件修改的内容,然后删除原来的文件,重新命名.

丰润区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种、以读写的方式打开文...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网