C++学习——文件与数据处理

第八单元 文件与数据处理

文件分为两大类 一是程序文件,有:源程序文件(.cpp),目标文件(.obj),可执行文件(.exe)等。二是数据文件:在程序运行时,会将一些需要的数据(运行的中间结果或中间数据)输出到磁盘上存放起来,以后需要时再从磁盘上读取到计算机内存中,这种磁盘文件就是数据文件。程序运行中的输入和输出对象可以是数据文件。

文件概述

1.文本文件与二进制文件:文件是由若干个字节(8位)按顺序组成的

  1. 文本文件:每个字节存放一个字符 便于对字符进行逐个处理和输出 用记事本等文本工具可以直接打开阅读 但 占用存储空间较多 需要花费大量转换时间(二进制ASCII码)
  2. 二进制文件:把内存中的数据按内存中的存储形式输出,即字节流  占用较小的存储空间 但不便于阅读 用专门的软件浏览

2.C++的I/O流:C++中的输入和输出是一流(stream)的方式来处理的,分为输入和输出流

  1. 输入流:从键盘、文件等流向程序内部的数据流
  2. 输出流:从程序内部流向显示器、打印机、文件的数据流
  3. 基本输入输出流:istream(输入类)、ostream(输出类)、iostream(输入输出类)、iomanip(头文件控制输入输出格式)包含在iostream
  4. 文件流:ifstream(输入文件流类)、ofstream(输出文件流类)、fstream(输入输出文件流类) 包含在frstream中

3.FILE类型:在C语言操作文件要用到FILE结构体类型,定义在stdio.h中,要访问巍峨见,首先要通过指向FILE结构体类型的指针变量只想要操作的文件,然后调用与文件有关的函数。

C++的文件打开与关闭:1)在文件头部包含fstream库文件  2)打开文件:新建文件流对象,与要操作的文件建立联系(文件名、操作方式)3)操作文件 操作文件流对象,实现数据的输入输出功能  4)关闭文件:关闭文件流对象,断开与文件的联系

1.文件的打开:文件流对象可以在初始化时打开文件,也可以使用open方法打开

     1.只读方式打开:创建ifstream流对象,指定要操作的文件名,操作方式默认为只读

     用定义对象初始化的方式打开文件:

     //创建ifstream类型对象ifs,打开当前目录下的datal.txt文件,如果文件不存在,则创建一个新的文件

ifstream ifs("datal.txt");

    定义对象后,用open方法打开文件:   

      //创建输入流对象ifs,执行open方法打开文件 

ifstream ifs;
ifs.open("datal.txt");

     读取文件时,必须保证文件存在,如果不存在,文件流为空NULL 因此,打开ifstream流对象后要判断对象是否为空,如果为空,则给出提示信息后结束程序

ofstream ofs("datal.txt");
if(ifs==NULL)//或者if(!ifs)
{
    cout<<"file not exist";
    return 1; //根据函数定义的返回值类型返回一个表示打开失败的值,如1

}

引号中的文件名如果不包括路径,就是指当前目录,也可以指定路径,格式为 盘符:\\文件夹\\文件名

绝对目录:从头开始,用//分开

相对目录:从当前目录开始

    2.以只写方式打开 用fstream对象指定要操作的文件名,默认操作是只写

ofstream ofs1("datal.txt");
ofstream ofs2("d:\\datal.txt");
ofstream ofs3;
ofs3.open("datal.dat");

  文件不存在,会创建新的文件;文件存在,会删除原文件建立新文件

  如果创建新文件失败(指定目录不存在或不允许写入),文件流为空。因此,打开文件一般也要判断对象是否为空

if(ofs==NULL)或if(!ofs)
{
    cout<<"file write failure"
    retuurn 1;
}

如果希望将写入的内容直接追加到文件末尾,增加参数ios::app

执行时,如果当前目录中不存在datal.txt文件,则创建一个空文件;如果存在该文件,则以追加的方式打开文件爱你,向文件中写入的信息会追加到文件末尾,原来数据并不会消失

ofstream ofs("datal.txt",ios::app);

ofstream ofs;
ofs.open("datal.txt",ios::app)

   3.以读写方式打开文件

     文件允许同时读写,用fstream,并指定读写方式

fstream fs("datal.txt",ios::in|ios::out);

fstream fs("datal.txt",ios::in|ios::binary);

app指文件存在时将数据添加到文件末尾

binary指用二进制形式操作文件

2.文件的关闭

文件在操作完成后必须关闭,断开文件流与文件的联系,保证将缓冲区中的数据写到文件中,避免由于错误操作引起文件中的数据被修改。如果要再修改,重新执行打开操作。

关闭使用close方法,无参数。

ifs.close();

C++的文件读写 

1.fstream类常用检查方法:eof函数检测是否到达末尾,如果到达末尾返回true,否则返回false。判断文件操作不成功,如果打开文件流对象失败或者遇到无效的输入格式,可以调用fstream类的fail函数返回true (ps.默认是顺序读写)

2.文本文件的读写:顺序访问,打开文件后从文件的第一个字符开始逐个读取字符,直到文件末尾

  1. 写文本文件 ofstream类是从ostream类派生的,可以使用ostream类中定义的流插入运算符<<、put成员函数,实现从内存变量到文件的输出过程  1)插入运算符<<输出一个字符  2)put成员函数输出一个字符,如:char ch;ofs.put(ch);
    //将一个字符串写入文件中
    #include<iostream>//向屏幕进行输入输出 
    #include<fstream>
    using namespace std;
    int main()
    {
    	ofstream ofs("datal.dat");
    	if(!ofs)//打开文件爱你失败则提示出错后返回 
    	{
    		cout<<"file write failure!"<<endl;
    		return 1;
    	}
    	char s[80]="hello\nhow are you\nok";
    	ofs<<s;//写入s字符串 
    	ofs.close(); //使用后关闭文件 
    	return 0;
    }

    结果如图:

  2. 读文本文件:ifstream类是从istream类派生的,可以使用istream类中定义的流提取运算符>>和get,getline 1)用流提取运算符>>读取一个字符,回车字符不显示  2)用get成员函数读取一个字符,回车显示,如"char ch;ifs.get(ch);"  3)用getline成员函数读取一行字符串,回车符显示
    逐个读取文件中的字符 输出到显示器上 
    
    #include<iostream>//向屏幕进行输入输出 
    #include<fstream>
    using namespace std;
    int main()
    {
    	ifstream ifs("datal.dat");
    	if(!ifs)//打开文件后失败 则提示出错 后返回 
    	{
    		cout<<"file write failure!"<<endl;
    		return 1;
    	}
    	char s;
    	while(1)//永远为真
    	{
    		ifs>>s;//读一个字符 ifs>>s 
    		if(ifs.eof())//判断是否到末尾 如果到末尾 循环结束
    			break; 
    		cout<<s; //读出读取的字符 
    	 } 
    	 ifs.close();//关闭文件 
    	return 0;
    }

     

  3. 二进制文件的读写:增加参数ios::binary 
    写二进制文件用write函数实现
    原型声明:
    ostream& write(const char*buffer,int len); //指针变量buffer指向内存中字符串的空间
                                                //len是带写入的字节数
    
    //将一个数值写入文件中
    ofstream ofs("data3.dat");
    double val=1;
    ofs.write((char*)val,sizeof(val));

    读二进制文件用到read函数

    原型声明:
    istream& read(char*buffer,int len);
    
    读取文件中的字节
    ifstream ifs("data3.dat");
    char s[30];
    ifs.read(s,30);

    C语言的文件打开与读写:打开文件时,通过一个指向FILE结构体的指针变量与文件建立联系P210---P212

文件应用实例:P212---P220

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值