2025年**带你玩转C语言 - 17-文件操作

**带你玩转C语言 - 17-文件操作文件基本概念 文件流 C 语言把文件看作是一个字符的序列 即文件是由一个一个字符组成的字符流 因此 c 语言将文件也称之为文件流 文件分类 文本文件 以 ASCII 码格式存放 一个字节存放一个字符 文本文件的每一个字节存放一个 ASCII 码 代表一个字符 这便于对字符的逐个处理 但占用存储空间 较多 而且要花费时间转换

大家好,我是讯享网,很高兴认识大家。

文件基本概念

  • 文件流:
    • C 语言把文件看作是一个字符的序列,即文件是由一个一个字符组成的字符流,因此 c 语言将文件也称之为文件流。
  • 文件分类
      • 以 ASCII 码格式存放,一个字节存放一个字符文本文件的每一个字节存放一个 ASCII 码,代表一个字符。这便于对字符的逐个处理,但占用存储空间
        较多,而且要花费时间转换。
      • .c文件就是以文本文件形式存放的
    • 二进制文件
      • 以补码格式存放。二进制文件是把数据以二进制数的格式存放在文件中的,其占用存储空间较少。数据按其内存中的存储形式原样存放
      • .exe文件就是以二进制文件形式存放的
    文本文件

  • 文本文件和二进制文件示例
    • 下列代码暂时不要求看懂, 主要理解什么是文本文件什么是二进制文件
#include <stdio.h> int main() { /* * 以文本形式存储 * 会将每个字符先转换为对应的ASCII, * 然后再将ASCII码的二进制存储到计算机中 */ int num = 666; FILE *fa = fopen("ascii.txt", "w"); fprintf(fa, "%d", num); fclose(fa); /* * 以二进制形式存储 * 会将666的二进制直接存储到文件中 */ FILE *fb = fopen("bin.txt", "w"); fwrite(&num, 4, 1, fb); fclose(fb); return 0; } 

讯享网
  • 内存示意图

    讯享网

  • 通过文本工具打开示意图
  • 文本工具默认会按照ASCII码逐个直接解码文件, 由于文本文件存储的就是ASCII码, 所以可以正常解析显示, 由于二进制文件存储的不是ASCII码, 所以解析出来之后是乱码

文件的打开和关闭

  • FILE 结构体
    • FILE 结构体是对缓冲区和文件读写状态的记录者,所有对文件的操作,都是通过FILE 结构体完成的。
讯享网 struct _iobuf { char *_ptr; //文件输入的下一个位置 int _cnt; //当前缓冲区的相对位置 char *_base; //文件的起始位置) int _flag; //文件标志 int _file; //文件的有效性验证 int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取 int _bufsiz; // 缓冲区大小 char *_tmpfname; //临时文件名 }; typedef struct _iobuf FILE; 

  • fileopen函数
函数声明 FILE * fopen ( const char * filename, const char * mode );
所在文件 stdio.h
函数功能 以 mode 的方式,打开一个 filename 命名的文件,返回一个指向该文件缓冲的 FILE 结构体指针。
参数及返回解析
参数 char*filaname :要打开,或是创建文件的路径。
参数 char*mode :打开文件的方式。
返回值 FILE* 返回指向文件缓冲区的指针,该指针是后序操作文件的句柄。
mode 处理方式 当文件不存在时 当文件存在时 向文件输入 从文件输出
r 读取 出错 打开文件 不能 可以
w 写入 建立新文件 覆盖原有文件 可以 不能
a 追加 建立新文件 在原有文件后追加 可以 不能
r+ 读取/写入 出错 打开文件 可以 可以
w+ 写入/读取 建立新文件 覆盖原有文件 可以 可以
a+ 读取/追加 建立新文件 在原有文件后追加 可以 可以

注意点:

  • Windows如果读写的是二进制文件,则还要加 b,比如 rb, r+b 等。 unix/linux 不区分文本和二进制文件

  • fclose函数
函数声明 int fclose ( FILE * stream );
所在文件 stdio.h
函数功能 fclose()用来关闭先前 fopen()打开的文件.
函数功能 此动作会让缓冲区内的数据写入文件中, 并释放系统所提供的文件资源
参数及返回解析
参数 FILE* stream :指向文件缓冲的指针。
返回值 int 成功返回 0 ,失败返回 EOF(-1)。
#include <stdio.h> int main() { FILE *fp = fopen("test.txt", "w+"); fclose(fp); return 0; } 

一次读写一个字符

  • 写入
函数声明 int fputc (int ch, FILE * stream );
所在文件 stdio.h
函数功能 将 ch 字符,写入文件。
参数及返回解析
参数 FILE* stream :指向文件缓冲的指针。
参数 int : 需要写入的字符。
返回值 int 写入成功,返回写入成功字符,如果失败,返回 EOF。
讯享网#include <stdio.h> int main() { // 1.打开一个文件 FILE *fp = fopen("test.txt", "w+"); // 2.往文件中写入内容 for(char ch = 'a'; ch <= 'z'; ch++){ // 一次写入一个字符 char res = fputc(ch, fp); printf("res = %c\n", res); } // 3.关闭打开的文件 fclose(fp); return 0; } 
  • 读取
<
小讯
上一篇 2025-02-10 07:32
下一篇 2025-04-06 21:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/37136.html