C/C++之文件操作————文件的打开与关闭

简介: C/C++之文件操作————文件的打开与关闭

1.前言

       为什么要使用文件呢?文件有什么作用呢?你是否还记得我们前面写的通讯录吗?在通讯录中我们进行了一改造由静态通讯录改为动态通讯录,但是有一点让我们非常难受,每次当我们运行起来程序的时候程序中都没有上次输入的信息,我们知道程序结束后程序开辟的内存会释放,我们输入的信息会随着内存的销毁而销毁,那我们应该如何保存我们的信息呢,信息保存有两种方式,一种是通过文件一种是通过数据库,在这里我给大家带来通过文件来保存信息,文件操作包括文件打开关闭,写文件读文件等的函数,以及改造我们的动态通讯录让他成为可以保存信息的动态通讯录。

2. 什么是文件

       磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的).

2.1 程序文件

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

2.2 数据文件

       文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。本章讨论的是数据文件。在以前各章所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示器上其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上文件。

2.3 文件名

       一个文件要有一个唯一的文件标识,以便用户识别和引用。文件名包含3部分:文件路径+文件名主干+文件后缀例如: c:\code\test.txt为了方便起见,文件标识常被称为文件名。

3.文件的打开与关闭

3.1文件指针

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

3.2文件的打开

文件打开需要用到函数fopen,我们进入cplusplus网站fopen查看函数的参数和返回值

       函数的返回值是FILE*类型,第一个参数是const char * filename这里值文件名,第二个参数const char * mode是文件的打开方式,打开方式可以分为:

文件使用方式 含义 如果指定文件不存在
“r”(只读) 为了输入数据,打开一个已经存在的文本文件 出错
“w”(只写) 为了输出数据,打开一个文本文件 建立一个新的文件
“a”(追加) 向文本文件尾添加数据 建立一个新的文件
“rb”(只读) 为了输入数据,打开一个二进制文件 出错
“wb”(只写) 为了输出数据,打开一个二进制文件 建立一个新的文件
“ab”(追加) 向一个二进制文件尾添加数据 出错
“r+”(读写) 为了读和写,打开一个文本文件 出错
“w+”(读写) 为了读和写,建议一个新的文件 建立一个新的文件
“a+”(读写) 打开一个文件,在文件尾进行读写 建立一个新的文件
“rb+”(读写) 为了读和写打开一个二进制文件 出错
“wb+”(读写) 为了读和写,新建一个新的二进制文件 建立一个新的文件
“ab+”(读写) 打开一个二进制文件,在文件尾进行读和写 建立一个新的文件

3.3文件的关闭

同样我们进入cplusplus网站fclose查看fclose函数的返回类型和参数

函数的返回值是int,参数是 我们指向的流,在这里我们指的是打开文件返回的指针

3.4文件打开与关闭的代码

#include<stdio.h>
int main()
{
  FILE* pf = fopen("data.txt", "w");
  if (pf == NULL)
  {
    perror("fopen");
    return 1;
  }
  else
  {
    //写文件
  }
  fclose(pf);
  pf = NULL;
  return 0;
}

        在我们运行程序前我们的文件不包括data.txt文件,我们运行后 可以看到文件中有data.txt文件,注意我们必须将文件的扩展名选项打开,否则会出现一些意想不到的错误。

3.5流

如果没有流,我们想要传输数据,需要我们自己去解决,由于外部设备种类多,每一种的传输方式又不相同,要想全部掌握会非常的难,因此出现了流这一个概念

 

       流是一个高度抽象的概念看到上面是不是有点难以理解我们可以将流理解为数据传输过来,通过流,系统传输到正确的外部设备上

 

我们将数据传到流上,流再传到外部设备上,流就是数据。在我们程序运行时,编译器会自动打开三个流,标准输入流 stdin,标准输出流stdout,标准错误流stderr.例如代码

#include<stdio.h>
int main()
{
  char ch = 'a';
  fputc(ch, stdout);
  return 0;
}

今天的内容就结束了,欢迎大家来三连。

目录
相关文章
|
1月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
20 0
Linux c/c++文件的基本操作
|
2月前
|
C++ 内存技术
[转]Visual C++内嵌swf文件并播放
[转]Visual C++内嵌swf文件并播放
|
1月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
47 0
|
1月前
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
70 0
|
2月前
|
Linux API C++
超级好用的C++实用库之文件目录操作
超级好用的C++实用库之文件目录操作
32 0
|
2月前
|
JavaScript 前端开发 测试技术
一个google Test文件C++语言案例
这篇文章我们来介绍一下真正的C++语言如何用GTest来实现单元测试。
20 0
|
3月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
|
3月前
|
监控 编译器 C++
【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)
【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)
89 0
|
3月前
|
安全 C++ Windows
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
3月前
|
C++
C++通过文件指针获取文件大小
C++通过文件指针获取文件大小
32 0