C语言文件操作详情(一)

 更新时间:2022年04月26日 17:19:40   作者:不知名小赖  
这篇文章主要介绍了C语言文件操作详情,主要讨论的是数据文件,通过处理的磁盘上的文件展开主题内容介绍,需要的小伙伴可以参考一下,希望对你的学习有所帮助

前言:

文件操作重要吗?

当然重要:如果我们想让自己的程序拥有记忆功能,那就需要把要记忆的信息和数据存入到一个外部文件里,以便下次提取。

一、文件是什么

磁盘上的文件是文件。但在程序设计中,我们一般谈的文件有两种:程序文件、数据文件

  • 程序文件:包括源程序文件(后缀 .c),目标文件(后缀 .obj)可执行程序(windows环境后缀为 .exe)。
  • 数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或则输出内容的文件。

VS编译器上所处理的数据的输入和输出都是以终端为对象的,即从终端的键盘上输入输入数据,运行结果显示到显示器上。但在有时候我们会把数据输出到磁盘上,在需要的时候再从磁盘上把数据读取到内存中使用,这里就是处理的磁盘上的文件。

文件包含三部分:文件路劲+文件名主干+文件后缀  

例如:c:\code\test.txt

二、文件类型

根据数据的组织形式数据文件被称为文本文件二进制文件

  • ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码
  • 数据在内存中以二进制的形式存储,如果不加转换的输出到外层,就是二进制文件

例如,数1000的存储形式为:

ASCLL码形式: 00110001 00110000 00110000 00110000 00110000 占5个字节
二进制形式存储:00000000 00000000 00100111 00010000 占4个字节

三、文件缓冲区

我们在学习C语言文件操作时我们也要简单的了解一下C语言的文件缓冲区概念:

  • 缓冲区Buffer)又称为缓存(Cache),是内存空间的一部分。也就是说,计算机在内存中预留了一定的存储空间,用来暂时保存输入或输出的数据,这部分预留的空间就叫做缓冲区(缓存)。
  • 在程序数据区到磁盘之间有输出缓冲区输入缓冲区,这些有兴趣的可以去深入了解一下

缓冲区是为了让低速的输入输出设备和高速的用户程序能够协调工作,并降低输入输出设备的读写次数。

四、文件指针

缓冲文件系中:关键的概念是“文件类型指针”,简称**“文件指针”**
  每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如:文件的名字,状态及文件当前的位置等)。这些信息保存在一个结构体变量中的。该结构体变量是有系统申明的取名:FILE

在使用的vs2013编译器的头文件stdio.h有以下的文件类型声名:

C语言文件操作<一>_文本文件

不同c编译器的FILE所包含的内容不完全相同,但是大同小异,

每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并 填充其中的信息。

一般都是通过一个FILE的指针来维护这个结构的变量。

FILE* pf;//文件指针变量

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

C语言文件操作<一>_打开文件_02

五、文件的打开和关闭

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

编写程序时,在打开文件的同时,都会返回一个FILE的指针变量指向该文件相当于建立了指针与文件的关系。

  • fopen 函数打开文件,fclose 来关闭文件
FILE *fopen(const char *filename, const char *mode);
int fclose(FILE *stream);

打开文件一般有两种方式:

  • 当前路劲下(相对路径)打开文件
  • 绝对路径打开
//以读的方式打开
//当前路劲下(相对路径)打开文件test.txt
fopen("test.txt", "r");
//绝对路径打开
fopen("E:\\C++file\\file\\test.txt", "r");

打开方式如下:

  • “r”(只读) 为输入打开一个已经存在的文本文件
  • “w”(只写) 为输出打开一个文本文件
  • “a”(追加) 向文件文件尾添加数据
  • “rb”(只读) 为输入打开一个二进制文件
  • “wb”(只写) 为输出打开一个二进制文件
  • “r+”(读写) 为读写打开一个文本文件
  • “w+”(读写) 为读写建立一个新的文本文件
  • “a+”(读写) 为读写打开一个文本文件
  • “rb+”(读写) 为读写打开一个二进制文件
  • “wb+”(读写) 为读写建立一个新的二进制文件
  • “ab+”(读写) 为读写打开一个二进制文件

注意:

  • 用 “r” 方式打开的文件,不能向其输入数据,并且该文件已存在,否则出错;
  • 用 “w” 方式打开的文件,只能向该文件输入数据,如果所打开的文件不存在,则在打开时新建一个以指定的名字命名的文件;如果指定文件存在,则在打开时将该文件删去,然后新建一个新的文件;
  • 如果函数 fopen 打开文件出错,则fopen返回一个空指针值 NULL;
  • 在程序开始运行时,系统自动打开3个标准文件:标准输入(stdin),标准输出(stdout),标准出错输 出(stderr)。如果要使用输入输出终端,则不需要打开,可以直接使用,如fputc(stdout,‘a’);向屏幕输出字符a。

C语言文件操作<一>_打开文件_03

  • 以读的形式打开文件文件必须存在
  • 以写的形式打开的文件,只能向该文件输入数据,如果所打开的文件不存在,则在打开时新建一个以指定的名字命名的文件;如果指定文件存在,则在打开时将该文件删去,然后新建一个新的文件;

到此这篇关于C语言文件操作详情(一)的文章就介绍到这了,更多相关C语言文件操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言超详细讲解排序算法上篇

    C语言超详细讲解排序算法上篇

    时间如流水,今天就到初阶数据结构最后一个知识章节了,常见的排序算法!在进入这期之前,程爱打篮球的程序猿想说一句,如果有不懂的地方可以反复观看我之前的内容,再还有不懂可以直接找我,帮你安排的妥妥的
    2022-03-03
  • C语言字母转换大小写的3种方法图文详解

    C语言字母转换大小写的3种方法图文详解

    我们在C语言入门的时候都会遇到要求写大小写转换的题目,所以下面这篇文章主要给大家介绍了关于C语言字母转换大小写的3种方法,文中给了详细的代码示例,需要的朋友可以参考下
    2023-10-10
  • C++ 三种继承方式及好处示例详解

    C++ 三种继承方式及好处示例详解

    这篇文章主要为大家介绍了C++ 三种继承方式及好处示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • C语言 递归解决青蛙跳台阶问题

    C语言 递归解决青蛙跳台阶问题

    递归做为一种算法在程序设计语言中广泛应用。基本含义&#8203;是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知
    2021-11-11
  • QT实现串口通信的完整步骤

    QT实现串口通信的完整步骤

    如果用qt写程序作为上位机,然后通过和usb和下位机通信的时候,就需要用到qt中的串口通信了,下面这篇文章主要给大家介绍了关于QT实现串口通信的相关资料,需要的朋友可以参考下
    2023-02-02
  • C语言 超详细讲解链接器

    C语言 超详细讲解链接器

    在C语言中,一个重要的思想就是分别编译,即若干个源程序能够在不一样的时候单独进行编译,而后在恰当的时候整合到一块儿。可是链接器通常是与C编译器分离的,链接器如何作到把若干个C源程序合并成一个总体呢,我们一起来看看
    2022-03-03
  • C语言结构体计算内存占用问题解析

    C语言结构体计算内存占用问题解析

    这篇文章主要介绍了C语言结构体计算内存占用问题解析,本文通过案例来解析了C语言计算结构体内存的方式和方法,需要的朋友可以参考下
    2021-07-07
  • C++简单实现的全排列算法示例

    C++简单实现的全排列算法示例

    这篇文章主要介绍了C++简单实现的全排列算法,结合实例形式分析了C++排序操作的实现技巧,需要的朋友可以参考下
    2017-07-07
  • Lambda表达式里面修改外部变量问题

    Lambda表达式里面修改外部变量问题

    这篇文章主要介绍了Lambda表达式里面修改外部变量的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Qt自定义控件实现多彩色仪表盘

    Qt自定义控件实现多彩色仪表盘

    这篇文章主要为大家详细介绍了Qt自定义控件实现多彩色仪表盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12

最新评论