小言_互联网的博客

C语言复习之拷贝文本文件(fgetc和fputc)的简单demo

268人阅读  评论(0)

开发环境:Window10,CLion

1.声明

当前内容主要为本人复习c语言之用,主要包含fget和fput方式读写文本文件

主要复习

  1. 文件的打开和关闭(fopen和fclose)
  2. 文件字符的读取和写入(fgetc和fputc)

2.基本demo

#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <string.h>
/*
内容:使用fopen和fclose读取文件(实现字符文件的读取和写入)
      使用fgetc和fputc方式实现读取和写入操作
时间:2021/05/01
作者:hy
*/
/**
 * @description 文件中的行全部都写入到writeFile中
 * @param readFile 读取的文件
 * @param writeFile 写入的文件
 */
void readAndWriteFile0(FILE *readFile, FILE *writeFile)
{
   
    /*char line[80];*/
    // 读取文件也就是使用fscanf
    int  ch;
    // 直接一个字符一个字符的读取,windows下默认结尾为\r\n
    while((ch=fgetc(readFile))!=EOF){
   
        if(ch=='\r' || ch=='\n'){
   
            puts("");
            fputc(ch,writeFile);
        }else{
   
            printf("%c",ch);
            fputc(ch,writeFile);
        }
    }
    /* Linux下运行正常,Window下运行不正常(不能按行读取)
        // 读取文件,注意这里需要结尾加\n,表示读取换行符,前面的是读取这一行的所有字符除了\n
    while(fscanf(readFile, "%[^\n]\n",line)==1)
    {
        int readLen = (int)strlen(line);
        printf("read line(%d):%s\n",readLen,line);
        fprintf(writeFile,"%s\n" ,line);

    }*/
}

// 打开和关闭文件句柄
void readAndWriteFile(char *readFileName,char *writeFileName)
{
   
    // using read model to read words.txt file
    FILE *readFile=fopen(readFileName, "r");// 使用读取文件方式,如果文件不存在则返回0
    // 这里需要检验文件是否打开失败,打开文件失败默认返回0,这里直接使用!即可
    if(!readFile)
    {
   
        printf("无法打开文件:%s",readFileName);
        return;
    }

    //FILE *writeFile=fopen(writeFileName, "w"); // 使用文件写入模式(文件不存在直接创建文件),追加文件使用a+
    FILE *writeFile=fopen(writeFileName, "a+");
    readAndWriteFile0(readFile, writeFile);
    // close file inputsream
    fclose(writeFile);
    fclose(readFile);

}


int main(int argc,char *args[])
{
   

   /* 手动使用,传递参数*/
    readAndWriteFile("../resources/words.txt","../resources/writeWords.txt");


    // 外界传递参数
    /*if(argc!=2)
    {
        puts("参数必须为2个");
        return 0;
    }*/
    // 第一个参数args[0]就是执行的本文件的名字,一共需要2个参数
    // main函数会主动将参数个数传进来为argc
    /*readAndWriteFile(args[1],args[3],args[2]);*/
    return 0;
}

3.测试



测试成功!

4.总结

1.感觉windwos平台的读取一行数据和Linux下的操作不同

2.fgetc为按一个字符一个字符的读取,结果为int类型,需要在显示的时候使用%c方式输出,fputc为向当前的文件中写入一个字符

3.a+表示向文件中追加内容(文件不存在则报错),r表示读取,w表示清空文件并写入(没有文件会自动创建)


转载:https://blog.csdn.net/weixin_45492007/article/details/116329508
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场