嵌入式初学-C语言-二七

文件操作

概述:

什么是文件:

是保存在外存储器(磁盘,u盘,移动硬盘等等)上的数据的集合。

文件操作体现在哪几个方面:
  1. 文件内容的读取
  2. 文件内容的写入

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

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

文件的分类:

根据数据的存储方式划分:
  1. 文本文件(ASCII文件)
  2. 二进制文件

文件标识

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

文件操作的步骤

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

 

文件的操作

  1. 打开文件,让系统为文件创建文件缓冲区
    1. 函数名:fopen
    2. 头文件:‘#include <stdio.h>’
    3. 函数原型:FILE *fopen(const char *path,const char *mode)
    4. 函数功能:打开文件,并为文件创建缓冲区
    5. 函数参数
      1. path:目标文件的路径
      2. mode:文件打开的方式(读,写,读写)
    6. 返回值:
      1. 成功:返回文件指针File*(缓冲区的首地址)
      2. 失败:返回NULL
  2. 文件关闭,文件使用完一定要记得释放
    1. 函数名:fclose
    2. 头文件:‘#include <stdio.h>’
    3. 函数原型:Int fclose(FILE*fp)
    4. 函数功能:关闭文件,释放缓冲区
    5. 函数参数:
      1. fp:已经打开的文件指针
    6. 返回值:
      1. 成功:返回0
      2. 失败:返回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;
}

 

文件的读写

单字符的读写

  1. 函数名:fgetc
  2. 头文件:#include <stdio.h>
  3. 函数原型:int fgetc(file *fp);
  4. 函数的功能:从fp代表的文件中获取一个字符
  5. 函数参数:
    1. fp:我们需要操作的文件的描述
  6. 返回值:
    1. 成功:返回读取到的字符
    2. 失败:或者文件末尾,返回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')
{
re = fgetc(fp);
printf("%c",re);
}
printf("\n");
// 关闭文件
fclose(fp);
return 0;
}

 方式2:

/**
* 单字符读取
*/
#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;
}
// 读取文件
char ch;
while((ch = fgetc(fp)) != EOF)
{
printf("%c",ch);
}
printf("\n");
// 关闭文件
fclose(fp);
return 0;
}

多字符读取

  1. 函数名:fgets()
  2. 头文件:#include <stdio.h>
  3. 函数原型:char *fgets(char *buf,int size,FILE *fp)
  4. 函数功能:从fp代表的文件中获取size个字符,放置在buf代表的内存中
  5. 函数参数:
    1. Buf:内存空间首地址,用于存放读取的字节
    2. Size:待读取的字符,实际读取size-1
    3. Fp:已打开的文件指针
  6. 返回值:
    1. 成功:返回buf
    2. 失败:文件末尾,返回NULL;

案例:

/**
* 多字符读取
*/
#include <stdio.h>
#include <string.h>
int main(int argc,char **argv)
{
if(argc < 2)
{
printf("输入有误,请按照<%s 文件路径>格式输入\n",argv[0]);
return -1;
}
FILE* fp = fopen(argv[1],"rw");
if(!fp)
{
perror("文件打开失败!");
return -1;
}
// 多字符读取
// 创建缓冲区大小
char buf[64] = {0};
while(fgets(buf,64,fp)!=NULL)
{
printf("%s",buf);
// 给buf赋初始值
memset(buf,0,sizeof(buf));
}
printf("\n");
fclose(fp);
return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值