C语言超详细讲解文件的操作

目录
  • 一、为什么使用文件
  • 二、什么是文件
    • 1.程序文件
    • 2.数据文件
    • 3.文件名
  • 三、文件指针
  • 四、文件的打开和关闭
  • 五、文件的顺序读写
  • 六、文件的随机读写
    • fseek
    • ftell
    • rewind
  • 七、文件结束判定

一、为什么使用文件

当我们写一些项目的时候,我们应该要把写的数据存储起来。只有我们自己选择删除数据的时候,数据才不复存在。这就涉及到了数据的持久化的问题,为我们一般数据持久化的方法有,把数据存在磁盘文件、存放到数据库等方式。使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。

二、什么是文件

磁盘上的文件是文件。

在程序设计中,我们一般说的文件有两种:程序文件、数据文件.

1.程序文件

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

2.数据文件

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

3.文件名

一个文件要有一个唯一的文件标识,以便用户识别和引用。

文件名的组成:文件路径 + 文件名主干 + 文件后缀

例如:c:\cyuyan\test.txt

三、文件指针

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

VS2013编译环境提供的stdio.h头文件中有以下的文件类型声明:

struct _iobuf {
    char *_ptr;
    int  _cnt;
    char *_base;
    int  _flag;
    int  _file;
    int  _charbuf;
    int  _bufsiz;
    char *_tmpfname;
   };
typedef struct _iobuf FILE;

不同的C编译器的FILE类型包含的内容不完全相同,大同小异。

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

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

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

四、文件的打开和关闭

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

fopen - 打开文件

fclose - 关闭文件 (文件使用之后一定要关闭,防止数据丢失)

//打开文件
FILE *fopen( const char *filename, const char *mode );
//filename - 要打开文件名    mode - 文件访问模式
//关闭文件
int fclose( FILE *stream );

常用的文件访问模式如下:

例如:

#include<stdio.h>
#include<errno.h>
int main()
{
	//打开文件
	FILE* pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		printf("%s\n", strerror(errno));
		return;
	}
	//使用文件

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

五、文件的顺序读写

函数详解:

fgetc - 从流中读取一个字符
int fgetc( FILE *stream );
stream - 指向FILE结构的指针
fputc - 将字符写入流
int fputc( int c, FILE *stream );
c - 要写入的字符    stream - 指向FILE结构的指针

fgets - 从流中获取一个字符串
char *fgets( char *string, int n, FILE *stream );
string - 数据的储存位置   n - 要读取的最大字符数  stream - 指向FILE结构的指针
fputs - 将字符串写入流
int fputs( const char *string, FILE *stream );
string - 输出字符串   stream - 指向FILE结构的指针

fscanf - 从流中读取格式化的数据
int fscanf( FILE *stream, const char *format [, argument ]... );
stream - 指向FILE结构的指针  format - 格式控制字符串  argument - 可选参数

fprintf - 将格式化的数据打印到流中
int fprintf( FILE *stream, const char *format [, argument ]...);
stream - 指向FILE结构的指针  format - 格式控制字符串  argument - 可选参数

fread - 从文件中读二进制数据
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
buffer - 数据的储存位置  size - 项目大小(以字节为单位)  count - 要读取的最大项数  stream - 指向FILE结构的指针

fwrite - 以二进制形式向流中写入数据
size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
buffer - 数据的储存位置  size - 项目大小(以字节为单位)  count - 要读取的最大项数  stream - 指向FILE结构的指针

scanf - 从标准输入流(stdin)上进行格式化输入的函数

printf - 向标准输出流(stdout)上进行格式化输出的函数

fscanf - 可以从标准输入流(stdin)/指定的文件流上读取格式化的数据

fprintf - 把数据按照格式化的方式输出到标准输出流(stdout)/指定的文件流

sscanf - 可以从一个字符串中提取(转化)出格式化数据

sprintf - 把一个格式化的数据转化成字符串

六、文件的随机读写

fseek

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

int fseek( FILE *stream, long offset, int origin ); //将文件指针移动到指定位置
stream - 指向FILE结构的指针  offset - 起始字节数  origin - 起始位置

fseek的使用

ftell

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

long ftell( FILE *stream );

ftell的使用:

rewind

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

void rewind( FILE *stream );

七、文件结束判定

feof函数:

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

1.文本文件读取是否结束,判断返回值是否为EOF(fgetc),或者NULL(fgets)。

  • fgetc判断返回值是否为EOF.
  • fgets判断返回值是否为NULL.

2.二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。

  • fread判断返回值是否小于实际要读的个数.

文本文件的例子:

二进制文件的例子:

到此这篇关于C语言超详细讲解文件的操作的文章就介绍到这了,更多相关C语言文件操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解C语言之文件操作下)

    目录 文件的随机读写 fseek函数 ftell函数 rewind函数 文件结束判定 feof函数和ferror函数 总结 文件的随机读写 之前的函数只能实现顺序读写,而实现随机读写需用fseek函数来定位--根据文件指针的位置和偏移量来定位文件指针 fseek函数 int fseek(FILE* stream, long int offset, int origin); 返回值:若成功返回0,则返回非0值. 参数:stream为文件指针,offset为偏移量.origin为起始位置,有三种 S

  • C语言中炫酷的文件操作实例详解

    目录 什么是文件 程序文件 数据文件 (本文重点) 文件名 文件的打开和关闭 文件指针 文件函数 相对路径与绝对路径 输入输出流 二进制读写 fwirte fread 总结 什么是文件 磁盘上的文件是文件 但是在程序设计中,我们一般谈的文件有两种:程序文件和数据文件(从文件功能的角度来分类). 程序文件 包括源程序文件(例如.c文件)目标文件(windows环境后缀为.obj)可执行程序(windos环境后缀为exe). 数据文件 (本文重点) 文件的内容不一定是程序,而是程序运行时读写的数据,

  • 详解C语言之文件操作(上)

    目录 什么是文件 程序文件 数据文件 文件名 文件类型 文件缓冲区 文件指针 文件的打开和关闭 输入和输出 总结 什么是文件 磁盘上的文件就是文件. 在程序设计中,我们一般谈的文件有两种:程序文件和数据文件 程序文件 包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe). 数据文件 文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行时需要从中读取数据的文件,或者输出内容的文件. 文件名 文件名包含三部分:文件路径.

  • C语言超详细文件操作基础下篇

    目录 一.文件的顺序读写 1.格式化的输出函数(fprintf) 2.格式化的输入函数(fscanf) 3.二进制读写 1.二进制输出函数(fwrite) 2.二进制输入函数 3.scanf,fscanf,sscanf.printf,fprintf,sprintf的区别 二.文件的随机读写 1.fseek函数 2.ftell函数 3.rewind函数 三.被错误使用的feof 总结 一.文件的顺序读写 兄弟们,上一章只介绍到了如何把单个的字符或者字符串如何写到文件里或者从文件中读取,文件的顺序读

  • C语言超详细文件操作基础上篇

    目录 一.为什么使用文件 二.什么是文件 1.什么是数据文件 2.什么是程序文件 3.文件名 三.文件的打开和关闭 1文件指针: 2.打开和关闭文件函数 (1)打开文件函数: (2)关闭文件函数 四.文件的顺序读写 1.写文件(fputc,操作一个字符) 2.读文件(fgetc,操作一个字符) 3.写文件(fputs,操作字符串) 4.读文件(fgets,操作字符串) 一.为什么使用文件 为了更好的把信息记录下来,对数据进行持久化的保存,这个时候我们就可以把数据写到文件里面去,使用文件我们可以将

  • 一篇文章带你了解C语言的文件操作

    目录 为什么使用文件 什么是文件 程序文件 数据文件 文件名 文件的打开和关闭 文件指针 fopen和fclose函数 文件的顺序读写 总结 为什么使用文件 我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候,数据才不复存在.这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件.存放到数据库等方式.使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化. 什么是文件 磁盘上的文件是文件.但是在程序设计中,我们一般谈的文件有两种:程序文件.

  • C语言常见的文件操作函数

    目录 一.文件的打开和关闭 1.文件指针 2.文件打开和关闭 二.文件的顺序读写 1.fgetc()和fputc()函数 2.fgets()和fputs()函数 3.fscanf()和fprintf()函数 4.fread()和fwrite()函数 三.文件的随机读写 1.fseek函数 2.ftell函数 3.rewind函数 四.文本文件和二进制文件 五.文件读取结束的判定 六.文件缓冲区 总结 一.文件的打开和关闭 1.文件指针 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存

  • C语言进阶之文件操作详解

    目录 0.Intro 1.文件名 2.文件的打开和关闭 2.1文件指针 2.2打开和关闭文件 3.文件顺序读写 3.1利用以上函数实现拷贝文件操作 3.2二进制的读写 3.3格式化输入输出函数 4.文件的随机读写操作 4.1fseek 4.2ftell 4.3rewind 5.文本文件和二进制文件 5.1一个数据在内存中的存储方式 6.文件读取错误的判定 6.1被错误使用的feof 7.文件缓冲区 7.1行缓冲 总结 0. Intro 在使用操作数据库之前,记录信息,录入数据需要文件操作,这样就

  • C语言超详细讲解文件的操作

    目录 一.为什么使用文件 二.什么是文件 1.程序文件 2.数据文件 3.文件名 三.文件指针 四.文件的打开和关闭 五.文件的顺序读写 六.文件的随机读写 fseek ftell rewind 七.文件结束判定 一.为什么使用文件 当我们写一些项目的时候,我们应该要把写的数据存储起来.只有我们自己选择删除数据的时候,数据才不复存在.这就涉及到了数据的持久化的问题,为我们一般数据持久化的方法有,把数据存在磁盘文件.存放到数据库等方式.使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久

  • C语言超详细讲解顺序表的各种操作

    目录 顺序表是什么 顺序表的结构体 顺序表的接口函数 顺序表相关操作的菜单 顺序表的初始化 添加元素 陈列元素 往最后加元素 往前面加元素 任意位置加元素 删除最后元素 删除前面元素 删除任意元素 整体代码(fun.h部分) 整体代码(fun.cpp部分) 整体代码(主函数部分) 结果展示 顺序表是什么 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数

  • C语言 超详细讲解库函数

    目录 1 返回整数的getchar函数 2 更新顺序文件 3 缓冲输出与内存分配 4 库函数 练习 1 返回整数的getchar函数 代码: #include<stdio.h> int main() { char c; while((c = getchar())!=EOF)//getchar函数的返回值为整型 putchar(c); return 0; } 上述代码有三种可能: 某些合法的输入字符在被"截断"后使得c的取值与EOF相同,程序将在复制的中途停止. c根本不可能

  • C语言超详细讲解栈的实现及代码

    目录 前言 栈的概念 栈的结构 栈的实现 创建栈结构 初始化栈 销毁栈 入栈 出栈 获取栈顶元素 获取栈中有效元素个数 检测栈是否为空 总代码 Stack.h 文件 Stack.c 文件 Test.c 文件 前言 栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作.进行数据插入和删除操作的一端称为栈顶,另一端称为栈底.栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则.有点类似于手枪弹夹,后压进去的子弹总是最先打出,除非枪坏了. 压栈:栈的插入

  • C语言超详细讲解队列的实现及代码

    目录 前言 队列的概念 队列的结构 队列的应用场景 队列的实现 创建队列结构 队列初始化 队列销毁 入队列 出队列 队列判空 获取队列元素个数 获取队列头部元素 获取队列尾部元素 总代码 Queue.h 文件 Queue.c 文件 Test.c 文件 前言 队列的概念 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 队列和前文所学的栈

  • C语言超详细讲解循环与分支语句基础

    目录 写在开始 1. 分支语句 1.1 if语句 1.2 switch 2. 循环语句 2.1 while()语句 2.2 do while()语句 2.3 for 语句 for语句中表达式的省略 break在循环语句中的作用 continue 在循环语句中的应用 总结: 写在开始 在内容开始之前给大家介绍一下在计算机中如何表示真假 0表示假,非0表示真. 1. 分支语句 分支语句也叫做条件选择语句,主要分为if语句和switch语句. 1.1 if语句 if()…{} else if()…{}

  • C语言超详细讲解getchar函数的使用

    目录 一.getchar 函数 二.缓冲区 1.什么是缓冲区 2.为什么要存在缓冲区 3.缓冲区的类型 4.缓冲区的刷新 三.getchar 函数的正确使用 1.getchar 的换行问题 2.getchar 与 scanf 的混合使用 一.getchar 函数 从上面的介绍来看,我们要正确使用getchar函数,首先得了解什么是缓冲区. 二.缓冲区 1.什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分. 也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部

  • C语言超详细讲解字符串函数和内存函数

    目录 字符串函数 长度不受限制的字符串函数 strlen strcpy strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找以及错误报告 strstr strtok strerror 内存操作函数 memcpy memmove memcmp 字符串函数 长度不受限制的字符串函数 strlen size_t strlen ( const char * str ) 求字符串长度: 字符串以'\0' 作为结束标志,strlen函数返回的是在

  • C语言超详细讲解数据结构中的线性表

    目录 前言 一.分文件编写 1.分文件编写概念 2.代码展示 二.动态分布内存malloc 1.初识malloc 2.使用方法 三.创建链表并进行增删操作 1.初始化链表 2.在链表中增加数据 3.删除链表中指定位置数据 四.代码展示与运行效果 1.代码展示 2.运行效果 总结 前言 计算机专业都逃不了数据结构这门课,而这门课无疑比较难理解,所以结合我所学知识,我准备对顺序表做一个详细的解答,为了避免代码过长,采用分文件编写的形式,不仅可以让代码干净利落还能提高代码可读性,先解释部分代码的含义,

  • C语言 超详细讲解链接器

    目录 1 什么是链接器 2 声明与定义 3 命名冲突 3.1 命名冲突 3.2 static修饰符 4 形参.实参.返回值 5 检查外部类型 6 头文件 1 什么是链接器 典型的链接器把由编译器或汇编器生成的若干个目标模块,整合成一个被称为载入模块或可执行文件的实体–该实体能够被操作系统直接执行. 链接器通常把目标模块看成是由一组外部对象组成的.每个外部对象代表着机器内存中的某个部分,并通过一个外部名称来识别.因此,==程序中的每个函数和每个外部变量,如果没有被声明为static,就都是一个外部

随机推荐