学习目的:要实现从磁盘读取数据,并将处理后的数据存到磁盘上。
文件分类:ASCII文件(text文件、字符文件)、二进制文件。
文件流:文件流是以外存文件(例:某磁盘上的txt文件)为输入输出对象的数据流。
输出:内存->外存(C++编译器->文本文件)
输入:外存->内存(文本文件->C++编译器)
文件类:文件类用于文件操作
ifstream类,用来支持从磁盘文件的输入;
ofstream类,用来支持从磁盘文件的输出;
fstream类,用来支持磁盘文件的输入和输出。
好了,正式进入完成从磁盘读写信息的环节!
第一步、我们要通过文件流类定义文件流对象。(这句话有点拗口,但是类比于咱们熟悉的cin与cout,cin、cout就是通过iostream类来定义的,这里类似于这个过程)
ofstream outfile;
会发现虽然已经定义了文件流对象outfile,但是没有指定文件的位置是不行的,所以下一步我们就做这个工作。
第二步、指定文件的路径以及I/O模式
ofstream outfile;//定义ofstream类(输出文件流类)对象outfile
outfile.open("f1.dat",ios::out);//使文件流与f1.dat文件建立关联
注意:
f1.dat文件通常要包含其具体路径,例如c:/new/1.txt,如果缺省路径,则默认在当前目录下。
ios::out是I/O模式中的一种,表示以输出方式打开一个文件。I/O模式还有很多种,这里就不赘述。
上面两句代码也可以合二为一,即在定义时就指定参数:
ostream outfile("f1.dat",ios::out);
第三步、对ASCII文件的读写
已经知道创建了文件流,且知道了文件的路径以及I/O模式,是时候进行读写了,实现对ASCII文件的读写有两种方式,分别是:
1、
流插入运算符“<<”、流提取运算符”>>”
2、
文件流的成员函数,如put、get、getline
程序代码:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int a[10];
ofstream outfile("D:/best.txt",ios::out);
if(!outfile)
{cerr<<"OPEN ERROR!"<<endl;
exit(1);
}
cout<<"enter 10 integer numbers"<<endl;
for(int i=0;i<10;i++)
{cin>>a[i];
outfile<<a[i]<<" ";}
outfile.close();
return 0;
}
注意:
若路径不正确,比如将”D:/best.txt”写成”D:\best.txt”,则打开失败,执行exit(0),强制终止程序(不会执行之后的代码了);
若该路径上找不到该文件,则创建文件;
输入时,数字与数字之间要按空格或换行。