io进程线程——day7.26

1.使用fgets设计给定文件的行号

1.1代码

#include <myhead.h>

int main(int argc, char const *argv[])
{
    //定义文件指针
    FILE *fp = NULL;
    if ((fp = fopen("./destfile.txt", "w")) == NULL)
    {

        perror("fopen erroe");
        return -1;
    }
    printf("open success\n");

    //向文件中写入字符串
    fputs("hello world\n", fp);
    fputs("hello 520\n", fp);
    fputs("hello 1314\n", fp);
    fputs("hello 2001\n", fp);
    fputs("hello 2008\n", fp);
    fputs("hello 666\n", fp);
    fputs("hello 999\n", fp);

    //关闭文件
    fclose(fp);

    //以只读的形式重新打开文件
    if ((fp = fopen("./destfile.txt", "r")) == NULL)
    {
        perror("fopen erroe");
        return -1;
    }

    //循环读取数据
    char buf[200] = "";
    int cont = 0; //记录行数
    while (1)
    {
        //清空容器
        bzero(buf, sizeof(buf));
        if (fgets(buf, sizeof(buf), fp) == NULL)
        {
            break; //说明文件读取结束
        }
        cont++;
    }

    printf("该文件的行数=%d\n", cont);

    //关闭文件
    fclose(fp);

    return 0;
}

为了清楚明了,我没传递一个文件,而是自己创造了一个destfile.txt文件,同时在该程序中向其输入了文档。

1.2运行结果

destfile.txt文件中内容:

2.使用fget,fputs完成两个文件的拷贝

 

2.1代码 

#include<myhead.h>

int main(int argc, char const *argv[])
{
    //判断传入的文件是否是3个
    if(argc!=3)
    {
        printf("传入错误\n");
        return -1;
    }

    //以只读的形式打开源文件
    FILE *sfp=NULL;
    if((sfp=fopen(argv[1],"r"))==NULL)
    {
        printf("源文件open error!\n");
        return -1;
    }

    //以只写的形式打开目标文件
    FILE *dfp=NULL;
    if((dfp=fopen(argv[2],"w"))==NULL)
    {
        printf("目标文件open error!\n");
        return -1;
    }

    //定义搬运工
    char buf[200]=" ";
    //循环从源文件中读取数据放入到目标文件中
    while(1)
    {
        //清空容器
        bzero(buf,sizeof(buf));
        //循环结束条件
        if(fgets(buf,sizeof(buf),sfp)==NULL)
        {
            break;
        }
        //将读取的数据写入目标文件中
        fputs(buf,dfp);
    }
    //关闭文件
    fclose(sfp);
    fclose(dfp);

    printf("拷贝成功\n");

    return 0;
}

2.2运行结果

我用上一题时创建的 destfile.txt 文件为源文件,再创建一个空白文件 newfile.txt 文件,运营后,目标文件 newfile.txt 也是成功拷贝了。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值