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

C语言之文件操作

目录

一、什么是文件?

二、C语言如何操作文件 

 1.操作方式

2.文件指针

        2.1 定义文件指针

      2.2文件的打开与关闭

    2.3文件的顺序读写

      2.3文件的随机读写

总结


一、什么是文件?

在电脑磁盘的上的文件。在程序设计中,分为两种:程序文件数据文件

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

数据文件:程序运行时读写的数据,例如程序运行需要从中读取数据的文件或者输出内容的文件


二、C语言如何操作文件 

 1.操作方式

 在C程序里,文件分为 A.文本文件(存放字符/文字的文件.txt)
                                   B:二进制文件(.data)把结构体的信息写入的文件被称为二进制文件   

对文档的操作方式主要有2种:

                读操作:从文件里面把文件的内容取出来,并输出到屏幕(不会改变文件的内容)
                写操作:把一些内容往文件里面写入(会改变文件的内容)

 注:每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。 


2.文件指针

         我们已经知道了,C语言对于文件的操作,那我们具体如何操作呢?                                                 我们可以使用文件指针,顾名思义,文件指针是指向文件的指针,存放的是文件首地址。

        2.1 定义文件指针

           创建一个FILE*的指针变量:

FILE* pf;文件指针变量

          定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个         结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变           量能够找到与它关联的文件。
 


      2.2文件的打开与关闭

          文件在读写之前,需要打开文件,使用结束后应该关闭文件
          ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。

//打开文件         
FILE *pf = fopen("要打开的文件名","打开方式");
//关闭文件
int fclose ( pf );

        打开方式,便是读、写等操作

 代码实例:


#include <stdio.h>
int main ()
{
//打开文件  使用"w",如果不存在myfile.txt,则会创建此文件
FILE *pFile = fopen ("myfile.txt","w");
//文件操作
if (pFile!=NULL)
{
//fputs是将字符串输入到文件当中。
fputs ("fopen example",pFile);
//关闭文件
fclose (pFile);
}
return 0;
}

    2.3文件的顺序读写

          在之前的代码里,我们可以看见一个函数fputs,该函数是文本行输出函数,在C程序里,任       何数据不会直接输出到对应的设备,而是会通过三个流,对应地传递过去。

        顺序读写步骤:打开、读取(只能从头开始读写)、关闭

         而同样,有些函数在传输的时候也会有限制,并不适合所有的流。 顺序读写的函数名和传输     限制如下:

举个例子 :

struct S
{char name[20];int age;float score;
};//测试二进制的写函数:fread
int main()
{struct S s = { 0};// 文件使用 “只读” 且是二进制FILE* pf = fopen("test.txt", "rb");if (NULL == pf){perror("fopen");return 1;}//读文件 freed也是二进制输入fread(&s, sizeof(struct S), 1, pf);printf("%s %d %f\n", s.name, s.age, s.score);//关闭文件fclose(pf);pf = NULL;return 0;
}

 如代码,重点强调:FILE* 指针访问的是文件信息区的地址,并且这些信息都是存放在结构体       其他函数用法就不一一解释了,可以通过MSDN查找,学习。


      2.3文件的随机读写

             随机读写,就是想读哪个位置就读哪个位置,指哪打哪的意思。

    1.fseek函数         

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

                                文档指针       光标移动位      
使用:int fseek ( FILE * stream, long int offset, int origin )

       origin 的值           光标位置
       SEEK_SET            文件开头
       SEEK_CUR          文件指针当前位置
        SEEK_END            文件结尾

 代码实例:

#include <stdio.h>
int main()
{FILE* pFile;pFile = fopen("example.txt", "wb");fputs("This is an apple.", pFile);fseek(pFile, 11, SEEK_SET);fputs("sam", pFile);fclose(pFile);return 0;
}

代码详解图: 

 

2.ftell函数

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

                       文档指针
long int ftell ( FILE * stream );

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

void rewind ( FILE * stream );

       随机函数的总结: 

                  第一个函数是控制光标移动                                                                                                                 第二个函数是返回光标移动的偏移量,                                                                                              第三个函数是光标回到初始位置


总结

           文档操作,主要弄清楚以下问题

           文件的分类,C语言如何访问文档,又该如何操作,文件的信息存放在哪?以什么方式存放。

            上述问题,全在博客之中,有着清晰明了的讲解,一点点深入了解文件 

            

                                                                                                                 ---------来自菜鸟TQ02

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

相关文章:

  • Linux->父子进程初识和进程状态
  • 【Linux学习笔记】5.Linux 用户和用户组管理
  • 茂名市 2021 年高中信息技术学科素养展评
  • 【软件测试】测试人不躺平,进军高级自动化测试自救,你的不一样结局......
  • win10环境下安装java开发环境安装java
  • 【华为OD机试模拟题】用 C++ 实现 - 开心消消乐(2023.Q1)
  • opencv图像融合
  • 没有经验的时候,怎么搞定面试?
  • 整数保序的离散化(C/C++)
  • python--排序总结
  • 进化的隐藏水印:深度学习提升版权保护的鲁棒性
  • Jenkins配置项目教程
  • C++多继承,虚继承部分总结与示例
  • 程序员35岁以后就没有出路了吗?听听京东10年测开的分析
  • 数据结构(六):冒泡排序、选择排序、插入排序、希尔排序、快速排序
  • C++之类与对象(上)
  • Java岗面试题--Java并发 计算机网络(日积月累,每日三题)
  • 三菱FX3U与威纶MT8071IP走RS422通讯
  • 给想考CISP的一点建议
  • ACM 记忆化搜索
  • spring框架常用注解简单说明
  • 2023-02-24 mysql/innodb-聚合-临时表避免OOM-使用磁盘文件-分析
  • cracklib与libpwquality 评估密码的安全性
  • 【Java】保证并发安全的三大特性
  • 如何优雅的用golang封装配置项(Functional Options)
  • Springboot 使用thymeleaf 服务器无法加载resources中的静态资源异常处理
  • 服务端IOS订阅类型支付接入详细说明与注意事项
  • 【剑指Offer】重建二叉树(递归+迭代)
  • 注解@Transactional 原理和常见的坑
  • 2023年全国最新交安安全员精选真题及答案4