【文件操作】c语言文件操作(上)

简介: 【文件操作】c语言文件操作(上)

前言

在程序运行中,大部分的数据都在内存中被运行或者被调用,若是程序结束运行后,程序在内存中申请的内存空间就会被释放或者被操作系统回收;但是往往许多程序需要将数据保存,例如游戏存档,通讯录…;但是有什么方法能将内存中的数据保存起来呢?
若是想将数据存储起来,可以使用文件将数据保存


什么是文件

文件在程序设计中一般分为两种,即程序文件与数据文件;(从文件的功能角度进行分类)

程序文件

  • 程序是为完成某项活动所规定的方法
  • 描述程序的文件即为程序文件

例如:

源程序文件、目标文件、可执行程序等


数据文件

然而并不是所有文件的内容都是程序,也有可能是程序运行时读写的数据,例如程序运行需要从文件中读取数据,或者是将数据存储在文件中。


文件信息区

计算机在每个文件被使用时,都会为文件开辟一块空间,这块空间被称为文件信息区,这块空间一般被用来存放文件的文件名,文件大小,文件位置等信息

每一块文件信息区都会被与其对应的文件绑在一起,换另一种说法即为,每个文件都会存在一块对应的文件信息区。


打开文件与关闭文件

将大象塞进冰箱的方法有三步,将冰箱门打开,把大象塞进去,再将冰箱关上

文件也是如此,在进行的读或是写时,首先要先将文件打开,再相应的进行读或是写的动作,最后使用过后再将文件关闭


打开文件 - fopen函数

既然要进行打开文件与关闭文件的操作,应该如何打开文件?

在c语言中,存在着这么一个函数 ;

  • fopen函数

该函数的返回值为FILE*

FILE* 类型为c语言<stdio.h>文件中的一个结构体类型,是管理文件流的一种结构;

该函数若是将文件打开成功返回一个FILE*的指针

若是打开失败则返回空指针

该函数共有两个参数:

  • const char * filename
    该参数为文件名,即包含要打开的文件名的字符串;
    要打开的文件在项目中即可直接使用文件名(+文件后缀);
    若是要打开的文件存在于其他目录中,则需要使用绝对路径或是相对路径才能对其进行访问 ;
  • const char * mode
    该参数为文件访问模式的字符串,使用者根据不同的需求使用不同的访问模式对文件进行访问:
文件使用方式 含义 如果指定文件不存在
“r”(只读) 为了输入数据,打开一个已经存在的文本文件 出错
“w”(只写) 为了输出数据,打开一个文本文件 建立一个新的文件
“a”(追加) 向文本文件尾添加数据 建立一个新的文件
“rb”(只读) 为了输入数据,打开一个二进制文件 出错
“wb”(只写) 为了输出数据,打开一个二进制文件 建立一个新的文件
“ab”(追加) 向一个二进制文件尾添加数据 出错
“r+”(读写) 为了读和写,打开一个文本文件 出错
“w+”(读写) 为了读和写,建议一个新的文件 建立一个新的文件
“a+”(读写) 打开一个文件,在文件尾进行读写 建立一个新的文件
“rb+”(读写) 为了读和写打开一个二进制文件 出错
“wb+”(读写) 为了读和写,新建一个新的二进制文件 建立一个新的文件
“ab+”(读写) 打开一个二进制文件,在文件尾进行读和写 建立一个新的文件

同时,该函数在打开文件时可能会出现打开文件失败,若是打开文件失败,则需要及时将程序停止,否则则会对空指针NULL进行非法访问:

FILE*pt = fopen("text.txt", "r");//以只读的形式打开文件
  if (pt == NULL) {//判断返回值FILE*指针是否为空指针
    perror("Fopen");//利用perror函数打印错误信息
    return 1;//提前结束函数
  }


关闭文件 - fclose函数

在操作完文件时应及时关闭文件,相应的除了打开文件的函数还有关闭文件的函数;

  • fclose函数

该函数的返回值为 int

若是关闭文件成功则返回0;

若是关闭文件不成功则返回EOF(文件结束标志,值为-1);

该函数只有一个参数 - FILE* stream

即指向指定要关闭的流的 FILE* 对象的指针

在使用完文件后应及时将文件关闭,并将FILE*指针置空,避免野指针的出现;

int main()
{
  //打开文件
  FILE* pt = fopen("text.txt", "w");//以只写的模式打开文件text.txt
  if (pt == NULL) {//判断返回值FILE*指针是否为空指针
    perror("Fopen");//利用perror函数打印错误信息
    return 1;//提前返回函数
  }
  //操作文件
  //关闭文件
  fclose(pt);//关闭文件
  pt = NULL;//将指针置空避免野指针的出现
  return 0;
}

总结

  • 打开文件后对FILE*进行判断
    使用fopen函数打开文件时,应对FILE指针进行判断,判断打开文件是否成功,若是成功则返回一个FILE的指针,若是打开失败则返回空指针;若是不对 FILE * 指针进行判断,则可能会出现对空指针的一个非法访问。
  • 打开文件前应确认路径
    使用fopen函数打开文件时应提前对文件的路径进行确定,若需要打开的文件存在于项目中,则可以直接使用文件名;若是文件不存在于项目中(其他路径),则需要使用相对路径或是绝对路径,否则可能出现打开文件失败。
  • 打开文件前应确认文件名
    在打开文件前除了要对路径进行确定,同时也要对文件的文件名进行确定,在计算机中可能会出现隐藏文件名后缀的现象,若是在使用fopen函数打开文件时没有将文件的正确文件名作为参数则也会出现打开文件失败。
  • 操作完文件时应该及时关闭文件
    在使用完文件过后应及时将文件关闭,若是不及时关闭文件,可能会导致数据丢失,在计算机中存在着一个区域叫作缓冲区,文件的读写并不是直接进行读写,而是以输入缓冲区(输出缓冲区)为一个中转站,在使用fclose函数关闭文件时,会先将缓冲区的数据写入文件中再撤销缓冲区。
  • 关闭文件后应及时置空指针
    在使用fclose函数关闭文件后,应及时将指针置空NULL,否则将出现野指针,野指针的概念即为指向一个随机内存空间的指针,这个指向可能是没有被初始化或是指向已经被释放的内存空间。


相关文章
|
20天前
|
存储 C语言
【c语言】玩转文件操作
本文介绍了C语言中文件操作的基础知识,包括文件的打开和关闭、文件的顺序读写、文件的随机读写以及文件读取结束的判定。详细讲解了`fopen`、`fclose`、`fseek`、`ftell`、`rewind`等函数的使用方法,并通过示例代码展示了如何进行文件的读写操作。最后,还介绍了如何判断文件读取结束的原因,帮助读者更好地理解和应用文件操作技术。
27 2
|
1月前
|
存储 C语言
C语言文件操作(2)
【10月更文挑战第2天】
|
1月前
|
程序员 编译器 C语言
C语言底层知识------文件操作
本文详细介绍了文件操作的基本概念,包括文件的分类(程序文件和数据文件,其中着重于数据文件的文本文件和二进制文件),流的概念及其在C程序中的应用,以及标准输入输出流stdin、stdout和stderr的作用。作者通过示例展示了如何使用fopen、fclose和常见的读写函数如fgetc、fputc和fgets进行文件操作。
21 2
|
2月前
|
C语言
C语言——文件操作
本文介绍了文件的基本操作,包括文件的打开、关闭、读取和写入。使用`fopen`函数以不同模式(如“r”、“w”等)打开文件,并通过`fclose`关闭。文章详细解释了如何利用`fputc`、`fputs`及`fprintf`进行格式化写入,同时介绍了`fgetc`、`fgets`和`fscanf`用于文件内容的读取。此外,还涵盖了二进制文件的读写方法以及如何通过`fseek`、`ftell`和`rewind`实现文件的随机访问。
50 1
C语言——文件操作
|
1月前
|
存储 缓存 编译器
文件操作——C语言
文件操作——C语言
|
1月前
|
存储 C语言
简述C语言文件操作
简述C语言文件操作
11 0
|
1月前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序
|
1月前
|
存储 程序员 编译器
C语言文件操作(1)
【10月更文挑战第1天】
|
1月前
|
存储 C语言
C语言的文件操作
C语言的文件操作
21 0
|
1月前
|
存储 移动开发 Unix
C 语言文件操作详解
C 语言文件操作详解