[C++STDLib基础]文件

概述

文件是在计算机内存中以二进制表示的数据在外部存储介质上的另一种存放形式。它可以使得数据以长期保存。

C++把每个文件都看成是一个有序的字节序列,每个文件都以文件结束标志结束。

文件通常分为二进制文件和文本文件。文本文件可以用文本编辑器打开查看便于阅读,读写时需要进行格式转换;二进制文件用文本编辑器打开时看到的是乱码,不便于阅读;读写时不需要格式转换,效率高。

  • 文本文件:是由字符序列组成,它的每个字节以ASCII码形式存放一个字符,又称ASCII码文件。Eg:数字3.1415个字符序列’3’,’’.,’1’,’4’,’1’存储,占5个字节。
  • 二进制文件:是按数据在内存中的存储原样格式存到磁盘文件中的。Eg:数字3.141存储成二进制文件时占4个字节。二进制文件输入输出时不进行数据格式转换。一般是可执行程序,图形,图像,声音,视频等文件。

处理和操作文件

读文件(输入):从磁盘文件读取数据到内存

写文件(输出):将内存数据输出到磁盘文件

  • ofstream 用于向文件写数据
  • ifstream 用于从文件中读数据
  • fstream  用于向文件写或从文件读数据
  • 这些类都定义在头文件<fstream>

文件打开方式

打开方式 说明
ios::in 打开文件进行读操作(ifstream默认模式)
ios::out 打开文件进行写操作(ofstream默认模式)
ios::ate 打开一个已有输入或输出文件并查找到文件尾
ios::app 打开文件以便在文件的尾部添加数据
ios::nocreate 如果文件不存在,则打开操作失败
ios::trunc 如文件存在,清除文件原有内容(默认)
ios::binary 以二进制方式打开

实例

文件操作步骤

  • 对于文件操作要做一下事情
  • 打开文件用于读和写
  • 检查打开是否成功
  • 读或写
  • 检查是否读完
  • 使用完文件后要关闭文件
#include <iostream> 
#include <conio.h>     

#include <fstream>
#include <iostream>
using namespace std;
//向文件中写数据
void test1()
{
	ofstream fout;//创建ofstream对象
	//当打开一个写文件时,缺省方式是创建一个新文件。1.当打开的文件已存在,文件原有内容被覆盖(只要打开原来的内容就被清空)  2.当打开一个旧文件,不覆盖原有内容,打算接着在后面写,可用打开方式选项app(append)  3.使用多个打开模式,中间用运算符"|"分割 eg:fout.open("score.txt",ios::out|iost::app);
	//从VC++运行,是project所在目录
	//运行exe文件,是exe文件所在的目录
	fout.open("score.txt",ios::out);//打开文件。//相当文件路径

	//写两行
	fout<<"Jim"<<"  "<<822<<endl;
	fout<<"Eric"<<"  "<<422<<endl;

	fout.close();//关闭文件。1.确保信息被保存 2.释放文件以便其他程序使用
} 
//从文件中读取数据
#include <Windows.h>
void test2()
{
	ifstream fin; //创建ifstream变量
	fin.open("score.txt",ios::in);//打开文件
	if (fin.fail())//或if(!fin) //检查文件是否准备准备好
	{
		cout<<"Unable to open input file\n";
		//exit(1);//退出程序
	}

	//开始从文件读取数据
	char name[80];
	int score;
// 	fin>>name>>score;  //其文件的必须是字符、空格和数字 组成
// 	cout<<name<<" "<<score<<endl;
// 	fin>>name>>score;
// 	cout<<name<<" "<<score<<endl;

	//检测文件尾
	//如果你不知道文件共有多少行,而又想读整个文件,如何知道什么时候到达文件尾?
	//可以调用成员函数eof()来检查是否到文件尾。如果达到文件尾,eof()返回true。
	int total=0,avg=0,temp=0,num=0;
	fin>>name>>temp;
	while(!fin.eof())
	{
		num++;
		total+=temp;
		fin>>name>>temp; 
	} 
	if (num>0)
	{
		cout<<"total:"<<total<<" avg:"<<total/num<<endl;
	}
	fin.close();
}  
void test(char t)
{
	std::cout<<"press key====="<<t<<std::endl;
	switch (t)
	{ 
	case '1':test1();break;
	case '2':test2();break; 
	case 27:
	case 'q':exit(0);break;
	default: std::cout<<"default "<<t<<std::endl;break;
	}
}
int main()
{
	while(1)
	{
		test(getch());
	} 
	return 0;
}

你可能感兴趣的:([C++STDLib基础]文件)