c语言入门到c++使用高手: c语言入门之文件(二)

第十二章 文件

第二节 文件的开,关,读,写实战操练

1. 文件的打开

  • 文件在读或写之前必须要打开,在读或写之后必须要关闭

  • fopen:文件打开函数,fopen函数的调用方式

FILE *fp; // FILE是个结构,fp是指向结构FILE的指针变量
fp = fopen(文件名, 使用的文件的方式) //文件名和使用文件的方式都是字符串“”
fp = fopen("a.txt", "r"); //打开a.txt文件, 使用的打开方式为只读
// fp现在就指向了打开的a.txt文件
// sizeof(FILE)

if(fp == NULL){
    文件打开失败
}
  • 通过fopen语句告诉系统三个信息
  1. 需要打开的文件名

  2. 使用文件的方式

  3. 让哪个指针变量指向被打开的文件,这里是fp这个指针变量

  • 文件有个位置指针fgetc

2. 文件的关闭

  • 只有fopen成功的文件才需要关闭

  • 关闭文件的原因

  1. 释放该文件占用的内存单元, 要养成资源用完要及时释放的好习惯

  2. 防止往文件中写内容时,文件内容写入不全(如果缓冲区没满,没有写入到磁盘,如果程序关闭,会导致文件内容写入不全),
    关闭文件的动作会触发系统把缓冲区的数据立即写入到磁盘上

  • fclose:文件关闭函数,fclose函数的调用方式:
// fclose(文件指针)
if (fp != NULL){
    fclose(fp); // fp就是fopen()的返回值
}

3. 文件的读写简单讲

  • fputc和fgetc函数
  • fputc():该函数把一个字符写到磁盘文件上去,一般形式为
fputc(ch, fp); //ch就是这个字符,如果fputc失败,会返回EOF,如果成功,返回值就是写入文件的那个字符的ascii码值
  • EOF (End of file) // #define EOF (-1)
#include <iostream>
#include <cstring>


int main(int argc, char *argv[]) {
    FILE *fp;
    fp = fopen("test.txt", "w");//打开只写文件,如果文件存在,文件内容清空,如果文件不存在,则创建文件
    if (fp == NULL) {
        printf("文件打开失败!\n");
    } else {
        // 文件打开成功
        char reco = fputc('a', fp);
        if (reco == EOF) {
            //写入失败
        } else {
            char reco = fputc('b', fp);

        }

    }
    if (fp != NULL) {
        fclose(fp); // fp就是fopen()的返回值
    }

    return 0;
}

  • fgetc: 从指定文件读入一个字符
  1. 调用形式: char reco = fgetc(fp)
  2. 如果执行成功,返回读入的字符,如果读入失败,或者整个文件读到末尾,返回EOF
#include <iostream>
#include <cstring>


int main(int argc, char *argv[]) {
    FILE *fp;
    // 文件刚打开,文件位置位于当前文件的头部
    // 以文本方式打开数据
    fp = fopen("test.txt", "r");
    if (fp == NULL) {
        printf("文件打开失败!\n");
    } else {
        // 文件打开成功
        // 读出一个字符,每读出一个字符,指针向下移一个字符
        char reco = fgetc(fp);
        // 判断文件是否读入结束
        while (reco != EOF) {
            putchar(reco);
            reco = fgetc(fp);
        }
    }
    if (fp != NULL) {
        fclose(fp); // fp就是fopen()的返回值
    }

    return 0;
}
  • feof(fp); //文件是否结束,如果文件结束,feof(fp)返回真(1), 如果文件没有结束,feof(fp)返回假(0)

4. 文件读写实战操练

  • 商业代码,需要非常严谨
#include <iostream>
#include <cstring>


int main(int argc, char *argv[]) {
    FILE *fp = fopen("test.txt", "r");
    // if(fp ==NULL)
    if (!fp) {
        printf("文件打开失败!\n");
    } else {
        // 文件打开成功
        char LineBuff[1024];//足以容纳一行的内容
        while (!feof(fp)) {
            LineBuff[0] = 0; // '\0'
            // 每次读取一行
            if (fgets(LineBuff, sizeof(LineBuff) - 1, fp) == NULL) {
                continue;
            }
            if (LineBuff[0] == '\0') {
                continue;
            }
lblprocstring:
            // 读到了实际内容
            if (strlen(LineBuff) > 0) {
                // 如果末尾是换行符或者回车符
                if (LineBuff[strlen(LineBuff) - 1] == 10 || LineBuff[strlen(LineBuff) - 1] == 13) {
                    LineBuff[strlen(LineBuff) - 1] = '\0';
                    goto lblprocstring;
                }
            }
            if (strlen(LineBuff) <= 0) {
                continue;
            }
            printf("%s\n", LineBuff);
        }
    }

    if (fp != NULL) {
        fclose(fp); // fp就是fopen()的返回值
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值