c语言中怎样向一个文件中添加信息

c语言中怎样向一个文件中添加信息,第1张

使用这几个函数。

int fseek (FILE *stream,long offset,int fromwhere)

long ftell(FILE *stream)

int rewind(FILE *stream)

可以实现在一个文件的任意位置添加信息。但除了在文件尾添加信息之外,你写将要插入位置后面的文件内容读到缓冲,然后定位文件偏移量插入数据,在将读出来的写入。

因为文件在磁盘上是连续存放的,不可能说直接在中间插入内容而不覆盖原来的,别的语言提供的都是自己按照上述思路写的。

例程:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#include <Windows.h>

/* 读出文件放到数组中,新增数据插入到该数组中;

   重新将数组中的数据写入该文件中

*/

void main(int argc,char * agrv)

{

    FILE *fp

    char name[20]       //输入变量

    int sum             //输入变量

    char fName[10][20]  //可存储10个人名

    int fScore[10]      //存储10个分数记录

    char buff1[20]

    char buff2[20]

    int i=0

    //打开存储文件

    if ((fp=fopen("c:\\scorelist.txt","r"))==NULL)

    {

        printf("Can not open the file")

        getch()

        exit(0)

    } 

    else

    {   

        while (!feof(fp))

        {   

            ZeroMemory(buff1,sizeof(buff1))       //清空内存

            ZeroMemory(buff2,sizeof(buff1))

            fgets(buff1,sizeof(buff1),fp)         //读取名称

            fgets(buff2,sizeof(buff2),fp)         //读取第二行分数

            if (strcmp(buff1,"")==0)

            {

                continue

            }

            else

            {

                strcpy(fName[i],buff1) 

                printf("%s",fName[i])                 //输出名称

                fScore[i] = atoi(buff2)                //将字符型转换成int型

                printf("%i\n",fScore[i])              //打印输出分数值

            }

            i++

        }

    }

    fclose(fp)

    //打开存储文件,将排好序的数据重新写入文件中

    if ((fp=fopen("c:\\scorelist.txt","w"))==NULL)

    {

        printf("Can not open the file")

        getch()

        exit(0)

    } 

    else

    {   

        printf("Input the new name:\n")

        scanf("%s",name)

        printf("Input the new score:\n")

        scanf("%i",&sum)

        int j =0

        //获取新增积分排序位置

        while(sum < fScore[j])

        {

             j++

        

        }

        //移动数据重新对数组排序,从后往前排序

        int m = i

        while (i>j)

        {

            strcpy(fName[i],fName[i-1])

            fScore[i] = fScore[i-1]

            i--

        }

        strcpy(fName[j],name)

        strcat(fName[j],"\n")

        fScore[j] = sum

        //写入文本文件

        int k=0

        while(k<=m)

        {

            fputs(fName[k],fp)

            fprintf(fp,"%i\n",fScore[k])

            k++

        }

    }    

    fclose(fp)

}

C语言中,通过文件打开函数fopen中的第二个参数,来设置打开模式。要在文件中添加内容,而不是重写,只需要设置a模式即可(append).

fopen的声明为

FILE * fopen(const char * name, const char *mode)

功能是打开文件名为name的文件,打开模式由mode指定。

当mode为

"a": 以追加方式打开。

"ab": 以追加方式打开二进制文件。

"ab+":以追加方式打开二进制文件,并可读。

"a+":以追加方式打开文件,并可读。

#define N 100 //定义结构体 struct student { int stuNumchar name[20]int ssNum}stu[N]//参数1: 将已经有两条记录的结构体当作参数传入,用来检索 //参数2: 讲你要插入位置的学生编号传入,用来定位 //参数3: 你已经录入数据的结构体的实际长度,以防循环检索时间索引溢出 void insert(struct student temp[], int insertNum, int allStuCount) { int i, jfor(i = 0i <allStuCounti++) { if(tempStu.stuNum == insertNum) { break} } for(j = nj >= ij--) { temp[j+1] = temp[j]} temp[i] = tempStu} 这只是部分的,输入和输入函数自己考虑怎么写吧~·加油....


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11830525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存