IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 游戏筑基开发之文件操作(C语言) -> 正文阅读

[C++知识库]游戏筑基开发之文件操作(C语言)

游戏筑基开发之文件操作(C语言)

1.文件的分类

??文件是用于存储信息的载体,是信息的集合。
??文本文件:人们可以读懂的文件。
??二进制文件:比如exe、bin文件就是二进制文件。

2.文件的打开和关闭

2.1 文件的打开

	fopen的头文件是stdio.h
	返回值 如果打开成功返回句柄 否则返回 NULL
	每次打开文件需要判断文件句柄是否打开成功
	FILE* 文件句柄 =  fopen(文件路径,文件打开模式);
文件打开模式中文描述
r以只读方式打开文件,该文件必须存在
r+以读/写方式打开文件,该文件必须存在
w打开只写文件,若文件存在则文件内容清空;文件不存在则创建该文件
w+打开可读/写文件,若文件存在则文件内容清空;文件不存在则创建该文件
a以追加的方式打开只写文件。文件不存在则创建该文件;文件存在则写入的数据会被加到文件尾后
a+以追加方式打开可读/写的文件。文件不存在则创建该文件;文件存在则写入的数据会被加到文件尾后
rb以只读方式打开二进制文件,该文件必须存在
rb+以读/写方式打开一个二进制文件,只允许读/写数据
wb以只写方式打开或新建一个二进制文件,只允许写数据
wb+以读/写方式打开或新建一个二进制文件,允许读和写
ab以追加的方式打开只写二进制文件。文件不存在则创建该文件;文件存在则写入的数据会被加到文件尾后
ab+以读/写方式打开一个二进制文件,文件不存在则创建该文件;文件存在则写入的数据会被加到文件尾后

2.2 文件的关闭

fclose(文件句柄变量名);

2.3 文本文件模式下操作文件

int main()
{
	FILE * pFile = fopen("1.txt","w");
	if(pFile == NULL)
	{
		printf("文件打开失败\n");
		return 0;
	}
	fclose(pFile);
	return 0;
}

3.文件操作函数

3.1 fscanf 文本模式读文件

读取的字节数 = fscanf(文件句柄,格式控制字符串,参数列表1…); 和scanf类似

3.2 fprintf 文本模式写文件

写入的字节数 = fprintf(文件句柄, 格式控制字符串,参数列表…); 和 printf类似

3.3 fgets 文本模式读指定字符长度,且遇到\n提前结束

字符串首地址 (失败返回NULL)= fgets(字符缓冲区,读取的长度,文件句柄);

3.4 fputs 文本模式写字符串到文件

fprintf(写入的字符串, 文件句柄);

3.5 fgetc 文本模式从文件读取一个字符

int fgetc(文件句柄);
如果读取成功 返回对应字符的ASCII码 读取失败返回EOF(EOF是一个符号常量表示文件读取出错 值为-1)

3.6 fputc 文本模式写一个字符进入文本

int fputc(写入的字符, 文件句柄);
写入成功 返回写入的字符; 写入失败返回EOF

3.7 ferror 判断文件是否出错

int ferror(文件句柄);
返回值:返回非0表示出错;返回0表示未出错
每次读写文件是回馈出现一个新的ferror返回值,如果不调用则会覆盖;执行fopen是 ferror的默认值为0

3.8 feof判断文件是否结束

int feof(文件句柄);
返回值:0表示文件可读 ,其余为文件不可读

3.9 fflush 刷新缓冲区文件函数

无条件的将缓冲区的数据写入物理设备中,因为缓冲区写入物理设备是有条件的,如果遇到断电是不会自动写入缓冲区的,在程序关闭是会刷新缓冲区,或缓冲区已满是会写入物理设备。
int fflush(文件句柄);
返回值:成功返回0 是否返回EOF

3.10 fread 二进制的文件函数

读取的字节数 = fread(缓冲区数组,读取的字节长度,读取的区块数量(1个区块是读取的字节长度*1),文件句柄);

3.11 fwrite 二进制写文件函数

写入的字节数 = fread(写入的数据,写入的字节长度,写入的区块数量, 文件句柄);

3.12 fseek 文件重定位函数

int fseek(文件句柄,偏移值,偏移位置);
偏移位置: SEEK_SET(文件开头 )、SEEK_END(文件末尾)、SEEK_CUR(当前位置)
返回值:成功返回0;否则返回非0
一般用于二进制文件的操作

3.13 ftell 获取当前文件句柄位置

long ftell(文件句柄);
返回当前文件读取的字节,否则返回-1
基本是配合fseek来使用

4.文件读写操作案例

4.1 读取格式化的文本文件

// 文件内容  4后面没有任何字符如回车、空格等等
// 1 2 3 4

#include <stdio.h>
#include <conio.h>
#include <stdio.h>

int main()
{
    // 打开文件
    FILE* pFile = fopen("./test.txt", "r");
    // 判断文件是否打开成功
    if (NULL == pFile)
    {
        printf("OPEN FILE ERROR\n");
        return 0;
    }
    int a, b, c, d;
    // 从文件中输入4个值
    fscanf(pFile, "%d%d%d%d", &a, &b, &c, &d);
    // 输出从文件中读取的值
    printf("%d-%d-%d-%d", a, b, c, d);
    int eof = feof(pFile);
    if (eof != 0)
        printf("file is no read\n");
    // 关闭文件
    fclose(pFile);
    return 0;
}

4.2 写数据进入文件

#include <stdio.h>
#include <conio.h>
#include <stdio.h>
int main()
{
    // 打开文件 注意打开模式
    FILE* pFile = fopen("./test.txt", "w");
    // 判断文件是否打开成功
    if (NULL == pFile)
    {
        printf("OPEN FILE ERROR\n");
        return 0;
    }

    int a, b, c, d;
    // 从控制台输入 4个数
    scanf(pFile, "%d%d%d%d", &a, &b, &c, &d);
    // 输入到文件中
    fprintf(pFile, "%d-%d-%d-%d", a, b, c, d);

    // 关闭文件
    fclose(pFile);
    return 0;
}

4.3 文本文件的其他操作

#include <stdio.h>
#include <conio.h>
#include <stdio.h>
int main()
{
    // 打开文件
    FILE* pFile = fopen("./test.txt", "r");
    // 判断文件是否打开成功
    if (NULL == pFile)
    {
        printf("OPEN FILE ERROR\n");
        return 0;
    }
    char buff[1024] = { 0 };
    // 读取一行文本
    fgets(buff, 1024, pFile);
    printf("%s\n", buff);

    // 移动到文件头 SEEK_END是文件末尾
    fseek(pFile, 0, SEEK_SET);
    //重新读取文件
    fgets(buff, 1024, pFile);
    printf("%s\n", buff);
    
    // 关闭文件
    fclose(pFile);
    return 0;
}

5.文件读写缓冲区的概念

????在计算机中文件一般存放在硬盘中,而硬盘的速度比内存满几十上百倍,如果每次数据直接写入硬盘则会导致系统整体发生卡顿,效率低下。于是就引入了缓冲区的概念。在需要把数据写入硬盘之前,先写入在内存中的某一部分,当积累数据达到一定量是,在写入硬盘,就避免了每次读写直接操作硬盘的低效率。

?????缓冲区的主要作用是用来匹配设备之间的速度差问题。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:14:33  更:2021-08-10 13:14:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 16:31:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码