小甲鱼__带你学C带你飞_p57读写文件1

"本文通过C语言展示了如何读取"hello.txt"文件的内容,并将其写入到"fishc.txt"中。使用了fgetc/fputc进行字符读写,以及fgets/fputs处理字符串。程序首先打开文件,然后使用循环读取并写入字符,最后关闭文件。同样,演示了如何使用fputs多次写入字符串到"lines.txt",再用fgets读取并打印出来。"
摘要由CSDN通过智能技术生成

p57读写文件1

  • 读写单个字符

    • fgetc 和 getc

    • 参数: stream 该参数是一个 FILE 对象的指针,指定一个待读取的文件流

    • fputc 和 putc

      int fputc(int c, FILE * stream);
      // c: 指定待写入的字符
      // stream : 该参数是一个 FILE 对象的指针,指定一个待写入的文件流
      

    现在让程序打开一个叫做"hello.txt"的文本文件,然后创建一个"fishc.txt"的文本文件,将"hello.txt"里面的内容写入到"fishc.txt"里面。

    # include <stdio.h>
    # include <stdlib.h>
    
    int main(void){
        FILE *fp1;
        FILE *fp2;
        // 我们要创建两个文件
        int ch;
        
        if((fp1 = fopen("hello.txt","r")) == NULL)
        {
            printf("文件打开失败!\n");
            exit(EXIT_FAILURE);
        }
        
        if((fp2 = fopen("fishc.txt","w")) == NULL)
        {
            printf("文件打开失败!\n");
            exit(EXIT_FAILURE);
        }
        
        // 用一个while循环读取里面的每一个字符
        while((ch = fgetc(fp1)) != EOF){
            fputc(ch,fp2);
        }
        fclose(fp1);
        fclose(fp2);
        return 0;
    }
    

    读写整个字符串

    • fgets 和 fputs
    • fgets 函数用于从指定文件中读取字符串。
    • fgets 函数最多可以读取 size - 1 个字符,因为结尾处会自动添加一个字符串结束符 ‘\0’。当读取到换行符(‘\n’) 或文件结束符(EOF) 时,表示结束读取(‘\n’ 会被作为一个合法的字符读取)。
    # include <stdio.h>
    char *fgets(char *s,int size, FILE *stram);
    s : 字符型指针,指向用于存放读取字符串的位置,读取的字符串存到s里面
    size: 指定 读取的字符数(包括最后自动添加的'\0')
    stream : 该参数是一个FILE对象的指针,指定一个待操作的数据流
    如果函数调用成功,返回s参数指向的地址
    
    • fputs函数用于将一个字符串写入到指定的文件中,表示字符串结尾的’\0’不会被一并写入。
    # include<stdio.h>
    int fputs(const char *s,FILE *stream);
    s : 字符型指针,指向用于存放待写入字符串的位置。
    stream : 该参数是一个 FILE 对象的指针,指定一个待操作的数据流
    

    先多次调用 fputs 函数,将几个字符串依次写入同一个文件中,调用fgets函数,在文件里读取,并把刚才写入的字符串打印到屏幕上。

    # include <stdio.h>
    # include <stdlib.h>
    # define MAX 1024
    
    int main(void){
        FILE *fp;
        char buffer[MAX];
        
        if((fp = fopen("lines.txt","w")) == NULL){
            printf("打开文件失败!\n");
            exit(EXIT_FAILURE);  
        }
        fputs("Line one : Hello World!\n",fp);
        fputs("Line two: piao_piao\n",fp);
        fputs("Line three: CH-zN,line\n",fp);
        fclose(fp);
        /*把文件关闭,操作结束,这是写入部分。
       写归写,读归读,程序才会有条理,如果没有关闭直接读取,这时候的位置指示器,
        指向的是文件末尾,而且之前我们写入的字符串现在在缓冲区里面,还没有写入进去,
        先关闭,落实到这三个字符串都写入到文件里面去了,然后再重新打开 */
        if((fp = fopen("lines.txt","r")) == NULL){
            printf("打开文件失败!\n");
            exit(EXIT_FAILURE);  
        }
        /* 字符串以EOF结尾,需要检测到末尾指示器(end-of-file indicator)被设置,没有被设置,返回值为 0, feof,如果被设置了,返回非 0 值*/
        while(!feof(fp)){
            fgets(buffer,MAX,fp);
          // 遇到换行符结束本次读取
            printf("%s",buffer);
           /* 第三行打印两次: fgets 遇到换行或eof会结束本次字符串的读取,
           在遇到第三行的换行符的时候,没有eof,认为本行字符串的读取结束,又进入了再一次的循环,这一次进去,整个文件剩下一个eof,只有eof而没有内容的时候,“如果还没读入任何字符就遇到eof,则s参数指向的位置保持原来的内容,函数返回NULL,”
          buffer 保留第三行,又打印出来了 */
        }
    	fclose(fp);
        return 0;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值