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

C语言-文件

目录

    • 1.什么是文件?
      • 1.1 程序文件
      • 1.2 数据文件
    • 2.二进制文件和文本文件?
    • 3.文件的打开和关闭
    • 4.文件的顺序读写
    • 5.文件的随机读写
      • 5.1 fseek
      • 5.2 ftell
      • 5.3 rewind
    • 6.文件读取结束的判定
    • 7.文件缓冲区

1.什么是文件?

磁盘上的文件就是文件
一般包含两种:程序文件数据文件

1.1 程序文件

程序文件包含源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)

1.2 数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据文件,或者输出内容的文件

2.二进制文件和文本文件?

根据数据的组织形式,数据文件被称为文本文件二进制文件
二进制文件:数据在内存中以二进制形式存储,不加转换的输出到外存的文件中
文本文件:要求在外存上以ASCll码的形式存储,则需要在存储前转换

3.文件的打开和关闭

文件在读写前应该打开文件,在使用结束后应该关闭文件

//打开⽂件
FILE * fopen ( const char * filename, const char * mode );
//关闭⽂件
int fclose ( FILE * stream );
“r”(只读)为了输入数据,打开一个已经存在的文本文件
“w”(只写)为了输出数据,打开一个文本文件
“a”(追加)向文本文件尾添加数据
“rb”(只读)为了输入数据,打开一个二进制文件
“wb”(只写)为了输出数据,打开一个二进制文件
#include <stdio.h>
int main()
{//打开文件FILE* pf = fopen("test.txt", "w");if (pf == NULL){perror("fopen");return;}//写文件char a = 'a';for (; a <= 'z'; a++){putc(a, pf);}//关闭文件fclose(pf);pf = NULL;return 0;
}

4.文件的顺序读写

在这里插入图片描述
上面说的适用于所有输入流⼀般指适用于标准输入流和其他输入流(如文件输入流);所有输出流⼀
般指适用于标准输出流和其他输出流(如文件输出流)。

5.文件的随机读写

5.1 fseek

根据文件指针的位置和偏移量来定位文件指针

int fseek ( FILE * stream, long int offset, int origin );

举例:

#include <stdio.h>
int main()
{//打开文件FILE* pr=fopen("test.txt", "r");if (pr == NULL){perror("fopen");return;}//读文件int ch = 0;ch=fgetc(pr);printf("%c\n", ch);fseek(pr, 4, SEEK_CUR);ch = fgetc(pr);printf("%c\n", ch);//关闭文件fclose(pr);pr = NULL;return 0;
}

5.2 ftell

返回文件指针相对于起始位置的偏移量

long int ftell ( FILE * stream );

举例:

/* ftell example : getting size of a file */
#include <stdio.h>int main ()
{FILE * pFile;long size;pFile = fopen ("myfile.txt","rb");if (pFile==NULL) perror ("Error opening file");else{fseek (pFile, 0, SEEK_END);   // non-portablesize=ftell (pFile);fclose (pFile);printf ("Size of myfile.txt: %ld bytes.\n",size);}return 0;
}

5.3 rewind

让文件指针的位置回到文件的起始位置

void rewind ( FILE * stream );

举例:

/* rewind example */
#include <stdio.h>int main ()
{int n;FILE * pFile;char buffer [27];pFile = fopen ("myfile.txt","w+");for ( n='A' ; n<='Z' ; n++)fputc ( n, pFile);rewind (pFile);fread (buffer,1,26,pFile);fclose (pFile);buffer[26]='\0';puts (buffer);return 0;
}

6.文件读取结束的判定

注意:在文件读取过程中,不能用feof函数的返回值直接来判断文件是否结束
feof的作用:当文件读取结束的时候,判断是读取结束的原因是否是:遇到文件尾结束

  • 文本文件读取是否结束,判断返回值是否为EOFfgetc),或者NULL(fgets)
  • 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数
    • fread判断返回值是否小于实际要读的个数

7.文件缓冲区

在这里插入图片描述
因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件

http://www.lryc.cn/news/328756.html

相关文章:

  • 牛客NC30 缺失的第一个正整数【simple map Java,Go,PHP】
  • Unity 基于Rigidbody2D模块的角色移动
  • Stata 15 for Mac:数据统计分析新标杆,让研究更高效!
  • vue配置代理proxy
  • .NET DES加密算法实现
  • 构建操作可靠的数据流系统
  • awesome-cheatsheets:超级速查表 - 编程语言、框架和开发工具的速查表
  • GFW不起作用
  • AndroidStudio出现类似 Could not create task ‘:app:ToolOperatorDemo.main()‘. 错误
  • 一些常见的ClickHouse问题和答案
  • 第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-分数
  • 并发编程——4.线程池
  • 阿里云魔搭发起“ModelScope-Sora开源计划”,将为中国类Sora模型开发提供一站式工具链
  • 大模型与数据分析:探索Text-to-SQL
  • Unity VisionOS开发流程
  • 聊聊k8s服务发现的优缺点
  • Tomcat是如何处理并发请求的?
  • H12-831_561
  • Java23种常见设计模式汇总
  • 神经网络与深度学习(一)
  • 算法学习——LeetCode力扣图论篇2
  • 大数据设计为何要分层,行业常规设计会有几层数据
  • css3之2D转换transform
  • pytest中文使用文档----6临时目录和文件
  • 从0开始搭建基于VUE的前端项目
  • elementUI this.$msgbox msgBox自定义 样式自定义 富文本
  • Lua与Python区别
  • Python学习(二)
  • 管理阿里云服务器ECS -- 网站选型和搭建
  • WPF中继承ItemsControl子类控件数据模板获取选中属性