当前位置: 首页 > news >正文

c语言复习之文件(十三)

在这里插入图片描述

1.概念

1.文件名

一个文件要有一个唯一的文件标识,以便用户识别和引用

文件名标识(被称为文件名)包括:

  • 文件路径———->文件在外部存储设备中的位置
  • 文件名主干
  • 文件名后缀——->文件性质

2.文件分类

  • 文本文件:每一个字节放一个ASCII代码文本文件

  • 二进制文件:把内存中的数据按照其在内存中的存储形式原样输出到磁盘存放

二进制快且小!!!

二进制文件

3.文件缓冲区

文件缓冲区

效率高

4.文件指针

FILE*

  1. stdin 标准输入文件指针 控制台 可以重定向
  2. stdout 输出… 控制台
  3. stderr 错误… 控制台

5.文件指针位置

表示当前的读写位置

2.操作

1.文件的打开与关闭

1.打开
FILE* fopen(char const* _FileName,char const* _Mode)//文件名,打开模式(读写)
//指向打开的文件(返回空,非空)
2.关闭
int fclose(FILE* _stream)
3.打开模式
1.r,a,w
//1.r只读--->存在--->不存在则打开失败
//2.w只写--->如果文件存在,则清除原文件内存后写入,否则,创建文件后写入
//3.a追加只写-->存在,则位置指针移动到文件末尾写入,不删除原数据
//不存在,打开失败
2.r+,w+,a+

在原有的基础上可读可写

3.rb,wb,ab

在rwb基础上,二进制

4.rb+,wb+,ab+

在rba+基础上,二进制

4.文件名非法

\ : * ? “” < > |

2.文件读写—>灵活

1.字符形式(一个字符)
//1.读取,读取成功时返回读到的字符,读取到文件末尾或者读取失败返回EOF
int fgetc(FILE* _stream);

//2.判断文件操作是否出错,出错时返回非零值,否则返回零值
int ferror(FILE* fp);

//3.字符写入函数fputc
int fputc(int ch,FILE* _stream);
//ch为要写入的字符,_stream为文件指针,写入成功时返回写入的字符,失败时返回EOF,
//返回类型为int也是为了容纳这个负数

//4.重置光标,重置光标到文件开头
rewind(FILE* fp);

//5.feof判断文件内部指针是否指向了文件末尾,当指向了文件末尾时返回非零值
//否则返回零值
int feof(FILE* _stream);

//6.perror()将文件错误信息输出到屏幕
2.字符串形式读写
1.读字符串函数

char* fgets(char* _Buffer,int _Maxcount,FILE* _stream)

  1. 说明:从指定文件中读取一个字符串,并保存到字符数组中
  2. Buffer:字符数组
  3. Maxcount:为要读取的字符数量(不要超过Buffer字符数组的大小)
  4. steam:为文件指针
  5. 返回值:读取成功时返回字符数组首地址,也就是Buffer;读取失败时返回NULL;如果开始读取文件时文件内部指针已经指向了文件末尾,那么读取不到任何字符,也返回NULL
  6. 注意:读取到Maxcount-1个字符之前如果出现了换行,或者读取到了文件末尾,则读取结束,这就意味这,不管Maxcount多大,fgets()最多只能获取一行数据,不能跨行,在c语言中,没有按行读取文件的函数,我们可以借助fgets()将Maxcount的值设置的足够大,每次就可以读取到一行数据
  7. BUFSIZ宏—>512
2.写字符串函数

int fputs(char const* _Buffer,FILE* _stream)

3.格式化读写
fscanf(fp,)//格式化读取
fprintf(fp,)//格式化写入
//后面的格式与scanf、printf一样
4.二进制读写—>块数据
fread();fwrite();
fread(void* Buffer(地址),size_t Elementsize(每个大小),size_t Elementcount(个数),FILE* _stream);
//极限:4kb左右--->大小*个数
//返回值:返回成功读写的快数(count),如果返回值小于count
//1.fread()可能读取到了文件末尾,发生错误
//2.fwrite()写入错误
5.随机读写

一般用于二进制文件,文本文件需要转换

fseek()用来将指针移动到任意位置

注意:随机读写不会插入——>覆盖

int fseek(FILE* _stream,long offset, int origin);
offset:偏移量,正前负后
origin:起始位置,从何处开始计算偏移量
//文件开头   SEEK_SET    0
//当前位置   SEEK_CUR    1
//文件末尾   SEEK_END    2
6.获取文件大小
int fillSize(const char* fileName)
{
    FILE* fp=fopen(fileName,"rb");
    if(!fp)
    {
        peeror("open failed!");
        return 0;
    }
    fseek(fp,0,SEEK_END);
    int size=ftell(fp);//返回当前下标
    //文件特别大时,可以使用 _ftelli64 lld型
    fclose(fp);
    return size;
}//引用时文件名加双引号
7.重定向

标准输入函数:除了从控制台输,还可以:

  1. freopen("重定向到哪个文件","方式",stdin);

    重定向到哪个文件—>将输入定向到该文件

    恢复重定向:freopen("CON","方式",stdin);

  2. 输出:freopen("将输出定向到该文件","方式",stdout);

    恢复“CON”

相关文章:

  • 【OJ每日一练】1033 - 等级成绩
  • 5G URLLC标准化关键技术分析
  • 安装GitHub上一些库的注意事项
  • 知识蒸馏DEiT算法实战:使用RegNet蒸馏DEiT模型
  • 《MySQL高级篇》九、数据库的设计规范
  • 我,30多岁的土木工程人,终于转行了
  • 动态DNS与DPDK高性能DNS -DPDK环境搭建
  • 【Numpy基础知识】通用函数ufunc基础知识
  • 甜点cc的2022年回顾总结
  • 【软件测试】瓶颈?资深测试聊测试开发的瓶颈在哪?
  • 基于SPRINGBOOT的高校羽毛球馆信息管理系统的设计与实现
  • NLP | 文本预处理
  • CSS -- 使用纯CSS实现旋转木马相册的效果
  • Fabric.js 限制边框宽度缩放
  • 发现一只常量
  • day06-表单标签及属性
  • 我的python学习经历及资源整理
  • 基于Java+Swing+mysql游泳馆会员管理系统
  • 新闻稿件怎样在新闻平台上面发布?有几种方法?
  • json-server的学习笔记