C语言文件操作

文件操作

概述

什么是文件

文件时保存在外存储器上(一般代指磁盘,也可以是U盘、移动硬盘等)的数据的集合。

文件操作体现在哪几个方面

  1. 文件内容的读取

  2. 文件内容的写入

  数据的读取和写入可被视为针对文件进行输入和输出的操作,此时数据就像水流一样从外存储器流向内存,或者从内存流向外存储器,所以系统形象的称文件操作为文件流。

  C语言程序对文件的操作采用“文件缓冲机制”。就是说在程序中对文件的数据读写并不是直接操作文件中的数据,而是系统会为文件在内存中创建“文件缓冲区”,程序对文件的操作,其实是在缓冲区进行的。

请添加图片描述

文件的分类

根据数据的存储方式划分:

  1. 文本文件(ASCII文件)
  2. 二进制文件

文件标识

  1. 文件系统中:路径+文件名,举例: d:/aaa/bbb.txt
  2. C语言程序中:文件指针(文件类型指针),语法: FILE *指针变量名

文件操作的步骤

  1. 打开文件
  2. 文件处理(读写文件)
  3. 关闭文件

文件的操作

打开文件——fopen

  • 打开文件,让系统为文件创建文件缓冲区;

  • 函数名:fopen

  • 头文件: #include <stdio.h>

  • 函数原型: FILE* fopen(const char *path,const char *mode);

  • 函数功能:打开文件,并为文件创建缓冲区

  • 函数参数:

    • path:目标文件的路径
    • mode:文件打开的方式(读-r、写-w、读写-rw)
  • 返回值:

    • 成功:返回文件指针 File* (缓冲区首地址)
    • 失败:返回NULL

文件关闭——fclose

  • 文件关闭,文件使用完毕,一定要记得释放

  • 函数名:fclose

  • 头文件: #include <stdio.h>

  • 函数原型: int fclose(FILE* fp);

  • 函数功能:关闭文件,释放缓冲区

  • 函数参数:

    • fp:已经打开的文件指针
  • 返回值:

    • 成功:返回0

    • 失败:返回EOF(-1)

  • 文件打开与关闭案例

    /**
    * 文件的打开与关闭
    */
    #include <stdio.h>
    int main(int argc, char **argv) {
         
    
    // 在命令行执行./a.out的时候,传递一个需要打开的目标文件的地址
    	if (argc < 2) {
         
    		printf("输入有误,请按照<%s 文件路径>格式输入\n", argv[0]);
    		return -1;
    	}
    // 根据提供的文件路径,打开文件,mode(r,w,rw)
    	FILE *fp = fopen(argv[1], "r");
    
    // 校验文件是否读取成功
    	if (!fp) {
         
    		perror("文件打开失败!");
    		return -1;
    	}
    	puts("文件打开成功!");
    // 关闭打开的文件
    	int ret = fclose(fp);
    
    // 校验文件是否关闭成功(很多时候这一步会省略掉)
    	if (ret == -1) {
         
    		perror("文件关闭失败!");
    		return -1;
    	}
    	puts("文件关闭成功!");
    	return 0;
    }
    

文件的顺序读写

单字符读取——fgetc

  • 函数名:fgetc
  • 头文件: #include <stdio.h>
  • 函数原型: int fgets(File* fp);
  • 函数功能:从fp代表的文件中获取一个字符
  • 函数参数:
    • fp:我们需要操作的文件的描述
  • 返回值:
    • 成功:返回读取到的字符
    • 失败:或者文件末尾,返回EOF(-1)

方式1:

/**
* 单字符的读取
*/
#include <stdio.h>
int main(int argc,char **argv)
{
   
if(argc < 2)
    {
   
        printf("输入有误,请按照<%s 文件路径>格式输入\n",argv[0]);
        return -1;
    }
    // 打开文件
    FILE* fp = fopen(argv[1],"r");
    // 非空校验
    if(!fp)
    {
   
        perror("文件打开失败!");
        return -1;
    }
    // 单字符读取文件
    int re = 0;
    while(re != -1 && re != '\n')//(ch = fgetc(fp)) != EOF
    {
   
        re = fgetc(fp);
        printf("%c",re);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值