永发信息网

c语言如何在文本第一行之前插入数据

答案:4  悬赏:0  手机版
解决时间 2021-11-13 06:56
c语言如何在文本第一行之前插入数据
最佳答案
1、c语言并没有提供这样的库函数,需要自己写。将要插入位置后面的文件内容读到缓冲,然后定位文件偏移量插入数据,在将读出来的写入。因为文件在磁盘上是连续存放的,不可能说直接在中间插入内容而不覆盖原来的,别的语言提供的都是自己按照上述思路写的。


2、例程:
#include 
#include 
#include 
#include 
#include 

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
",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:
");
        scanf("%s",name);
        printf("Input the new score:
");
        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],"
");
        fScore[j] = sum;
        //写入文本文件
        int k=0;
        while(k<=m)
        {
            fputs(fName[k],fp);
            fprintf(fp,"%i
",fScore[k]);
            k++;
        }
    }    
    fclose(fp);
}
全部回答
建立一个足够大的存储空间,
先存入你要插入的文本,
然后读取原文本,连接到插入字符串后面,然后重新写入文本.
可以先read()出来,再之前加数据在write()回去,要注意的事在write()之前你需要lseek()把文件指针重定到文件头
创建一个新文件,写入数据后再读原文件写入新文件,最后删除原文件,将新文件名称改为原文件名称。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
win10刚激活怎么用
求吉利数字好包红包?
T236的12车厢62号是几人坐,靠窗子么?
我姓秦,什么秦
这个清末时期青铜器皿的价值
报复是什么意思?
N年是指几年啊?拜托各位大神
南京理工[827] 经济学原理[微观经济学(100 分
U盘里的歌曲为什么会乱放?
我一直不明白天气预报上的东南风西北风到底是
插座并线,怎么把三股铜线塞到一个孔里?
淮南6中和淮南26中哪个好?
要是买芝柏表的话一定要去香港吗?在大陆能买
宣家埠一区去哪里坐358路公交车
试用期被延长2个月
推荐资讯
请教:DNS设置正确,不能上网问题
男猴女虎相配吗
义乌正宗牛杂面好吃吗,正宗牛杂面味道
在蔡伦改进造纸术之前,人们是怎样记载历史的
南康横寨坐1路公交车
我是12款福克斯换了金美浮1号以后油耗到11个
贾南风最后是怎么死的?
l0除以2等于5与10除以5等于2意义有何区别
oppo r3 怎么拆机图解
面对1929-1933年的经济危机,罗斯福指出:“
k518在蚌埠站会经常晚点吗
咸盐开水熬不化什么原因?是不是盐有问题
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?