C++文件操作

一.为什么要使用文件

如果没有文件,则程序的数据存储在内存中,程序结束时,数据就消失了,若要将文件长久保存,就可以使用文件.

二.什么是文件

磁盘上的文件就是文件,但是在程序设计中,一般谈的文件通常分为两种:程序文件和数据文件(从文件功能的角度来分类)

1.程序文件

源程序文件(xx.c),目标文件(xx.obj),可执行程序(xx.exe)

2.数据文件

用来存储数据的文件

3.文件名

一个文件要有一个唯一的文件名,包括三部分:文件路径+文件名主干+文件后缀

三.二进制文件和文本文件

数据文件分为文本文件和二进制文件

数据在内存中以二进制的形式存储,在不加转化的情况下存储,就是二进制文件

如果要一ASCII形式存储,则要在存储前转换,以ASCII的形式存储文件就是文本文件

字符类型一律已ASCII形式存储,数值型数据二种都可以

四.文件的打开和关闭

1.流和标准流

(1)流

程序的数据需要输出到外部设备,也要从外部设备获取数据,从不同外部设备输入输出操作各不相同,为方便操作设备,抽象出了"流"的概念,C程序针对文件,画面,键盘等数据输入输出操作都通过"流"来实现

(2)标准流

C语言程序在启动时默认打开了三个流:stdin(标准输入流(键盘)),stdout(标准输出流(屏幕)),stderr(标准错误六)

这三个流的类型是FILE*,通常称为文件指针

2.文件指针

每个被使用的文件都会在内存中开辟一个相应的文件信息区,用来存放文件的相关信息(文件名,位置等),这些信息被保存在一个名为FILE的结构体中

在不同编译器中,FILE包含的内容不完全相同,但是大同小异

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

pf指向某个文件的文件信息区(一个结构体变量),通过该文件信息区的信息就能够访问该文件,可以说,通过文件指针变量就能够间接找到它的关联文件

3.文件的打开和关闭

文件在读写前应该先打开文件,使用结束后关闭文件,打开文件时会返回一个FILE*类型的指针变量指向该文件,相当于建立了指针与文件的关系

可以使用"fopen"函数来打开文件,"fclose"来关闭文件,如果打开文件失败,会返回NULL

FILE *fopen(const char* filename,const char* mode)//分别为文件名和使用方式

C++文件操作_第1张图片

eg.

FILE* pf = fopen("./../data.txt","w")//打开文件,写入
//.表示当前目录
//..表示上一级路径

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

//写文件......

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

return 0;

五.文件的顺序读写

1.顺序读写函数的介绍

C++文件操作_第2张图片

eg.

FILE* pf = fopen("./../data.txt","w")//打开文件,写入

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

//写文件
for(int i = 0;i < 26;i++)
{
    fputc('a' + i,pf);
}
//读文件
int ch = fgetc(pr);
printf("%c\n",ch);//a

ch = fgetc(pr);
printf("%c\n",ch);//b
//读文件会按顺序依次往后读

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

return 0;

六.文件的随机读写

1.fseek

随机读写需要函数fseek:

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

eg.

fseek(pf,-4,SEEK_CUR);//从当前位置开始偏移,向左偏移4个

SEEK_CUR从当前位置开始偏移

SEEK_SET从起始位置开始偏移

SEEK_END从末尾开始偏移

第二个参数为偏移的长度

2.ftell

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

当文件比较复杂,不知道光标指针到哪里时,可以调用该函数

3.rewind

可以将文件指针回到起始位置

七.文件读取结束的判定

1.被错误使用的feof

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

feof的作用是:当文件读取结束时,判断结束原因是否是遇到文件末尾

ferror:在文件读取结束后,判断是否是因为遇到错误而结束

判断文件读取是否结束:

(1)文本文件读取是否结束,fgetc判断的返回值是否为EOF

fgets判断的返回值是否为NULL

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

八.文件缓冲区

标准采用"缓冲文件系统"来处理数据文件,缓冲文件系统会在内存中为程序中每一个正在使用的文件开辟一块"文件缓冲区".从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后再一起送到硬盘上,反之,从硬盘向计算机读入数据,也类似.

你可能感兴趣的:(c++,开发语言)