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++的朋友互关一起努力!!??


一、文件的随机读写

1. fseek 定位文件指针函数

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

改变原文件指针指向的位置

int fseek( FILE *stream, long offset, int origin );

参数:文件地址,偏移量,起始位置

这里的起始位置分为

SEEK_CUR 当前位置

Current position of file pointer

SEEK_END 文件字符的末位(最后一个字符的下个位置)

End of file

SEEK_SET 文件起始位置(第一个字符的起始位)

Beginning of file

偏移量右正左负

返回值:成功返回,0

用一段代码感受:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main()
{
	//FILE* fp = fopen("C:\\Users\\yujing wang\\Desktop\\test.txt", "w");//写入
	FILE* fp = fopen("C:\\Users\\yujing wang\\Desktop\\test.txt", "r");//读取

	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}

	//fputs("abcde", fp);//写入abc
	fseek(fp, 1, SEEK_SET);//第二个字符
	printf("%c", fgetc(fp));

	fseek(fp, 0, SEEK_CUR);//与上面一样
	printf("%c", fgetc(fp));

	fseek(fp, -1, SEEK_END);//最后一个字符
	printf("%c", fgetc(fp));


	fclose(fp);
	fp = NULL;

	return 0;
}

运行结果和想象的一样

在这里插入图片描述


2. ftell 当前偏移量函数

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

方便我们知道现在文件指针指向哪个位置

long int ftell ( FILE * stream );

参数:文件地址

返回值:偏移量

还是一段代码搞起~

#include <stdio.h>
#include <stdlib.h>

int main()
{
	FILE* fp = fopen("C:\\Users\\yujing wang\\Desktop\\test.txt", "r");//读取

	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}

	fseek(fp, 1, SEEK_SET);//指向第二个字符
	printf("%ld", ftell(fp));


	fclose(fp);
	fp = NULL;

	return 0;
}

结果符合我们的猜想

在这里插入图片描述


3. rewind 返回起始位置函数

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

void rewind ( FILE * stream );

参数:文件地址

返回值:NULL


把刚才的代码再加一行

int main()
{
	FILE* fp = fopen("C:\\Users\\yujing wang\\Desktop\\test.txt", "r");//读取

	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}

	fseek(fp, 1, SEEK_SET);//指向第二个字符
	rewind(fp);
	printf("%ld", ftell(fp));


	fclose(fp);
	fp = NULL;

	return 0;
}

运行结果

在这里插入图片描述

偏移量变为0了


二、文本文件和二进制文件

💫 二进制文件:数据在内存中以二进制的形式存储,如果不加转换的输出到外存

💫 文本文件:以ASCII字符的形式存储的文件,如果要求在外存上以ASCII码的形式存储,则需要在存储前转换


一个数据在内存中是怎么存储的呢?

  • 字符一律以ASCII形式存储
  • 数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储
  • 如有整数10000
  • 如果以ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节)
  • 二进制形式输出,则在磁盘上只占4个字节(VS2013测试)

在这里插入图片描述


三、feof 读取结束原因

在文件读取过程中,不能用feof函数的返回值直接用来判断文件的是否结束

该函数应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾结束

?feof的用途:是文件读取结束了,判断是不是遇到文件末尾而结束

?ferror的用途:文件读取结束了,判断是不是遇到错误后读取结束


1. 判断是否读取结束

  1. 文本文件读取是否结束,判断返回值是否为EOF (fgetc)或NULL(fgets)
  • fgetc读取结束返回EOF
  • fgets读取结束返回NULL
  • 其他函数请在c++图书馆中查找或者在MSDN中搜索
  1. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数
  • fread判断返回值是否小于实际要读的个数。

四、文件缓冲区

?ANSIC标准采用“缓冲文件系统”处理的数据文件的

?缓冲文件系统是指系统自动地在内存中为程序中为每一个正在使用的文件,开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。

如图所示

在这里插入图片描述

其实,在之前的学习过程中,就已经接触了内存缓存区

int main()
{
    int a = 0;

    while ((a = getchar()) != EOF)
    {
        if (('a' <= a && a <= 'z') || ('A' <= a && a <= 'Z'))
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }

        getchar();//将每次的'\n'除去
    }

    return 0;
}

这里的getchar就是将缓冲区未输出的数,取出来


缓冲区的大小根据C编译系统决定的。

?正因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区(fflush)或者在文件操作结束的时候关闭文件(fclose)


  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:15:22  更:2021-10-12 23:16:03 
 
开发: 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/19 22:24:41-

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