C++学习之文件 [柚 .1] 基于该网址整理自用,侵删
三个文件流类
- ifstream:用于从文件中读取数据
- ofstream:用于向文件中写入数据
- fstream:既可用于从文件中读取数据,又可用于向文件中写入数据
【需引用头文件<fstream> 】
ifstream 类和 fstream 类是从 istream 类派生而来的,ofstream 和 fstream 类从 ostream 类派生而来的。派生类具有基类的全部成员方法。【 cin 和cout 调用的成员方法,也同样适用于文件流。】
文件读入、关闭
无论是读取文件中的数据,还是向文件中写入数据,最先要做的就是调用 open() 成员方法打开文件。同时在操作文件结束后,还必须要调用 close() 成员方法关闭文件。
用open函数打开文件
以 ifstream 类为例,该类有一个 open 成员函数,其他类也有:
void open(const char* szFileName, int mode)
第一个参数是指向文件名的指针,第二个参数是文件的打开模式标记,文件的打开模式标记代表了文件的使用方式。
形如oFile.open("test1.txt", ios::out) 前者可为c:\\tmp\\test.txt 这样的绝对路径,也可为 tmp\\test2.txt 这样的相对路径,也可为test1.txt 。
使用流类的构造函数打开文件
定义流对象时,在构造函数中给出文件名和打开模式也可以打开文件。以 ifstream 类为例,它有如下构造函数:
ifstream::ifstream (const char* szFileName, int mode = ios::in, int);
第一个参数是指向文件名的指针;第二个参数是打开文件的模式标记,默认值为ios::in (以读取的方式打开); 第三个参数是整型的,也有默认值,一般极少使用。 形如ifstream inFile("c:\\tmp\\test.txt", ios::in)
close关闭
close() 方法的用法很简单,其语法格式如下:
void close( )
文件读写
fstream 或者ifstream 类负责实现对文件的读取,它们内部都对 >> 输出流运算符做了重载;同样,fstream 和ofstream 类负责实现对文件的写入,它们的内部也都对 << 输出流运算符做了重载。
所以,当 fstream 或者ifstream 类对象打开文件(通常以 ios::in 作为打开模式)之后,就可以直接借助 >> 输入流运算符,读取文件中存储的字符(或字符串) 当 fstream 或者ofstream 类对象打开文件(通常以 ios::out 作为打开模式)后,可以直接借助 << 输出流运算符向文件中写入字符(或字符串)。
举例:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int x,sum=0;
ifstream srcFile("in.txt", ios::in); //以文本模式打开in.txt备读
if (!srcFile) { //打开失败
cout << "error opening source file." << endl;
return 0;
}
ofstream destFile("out.txt", ios::out); //以文本模式打开out.txt备写
if (!destFile) {
srcFile.close(); //程序结束前不能忘记关闭以前打开过的文件
cout << "error opening destination file." << endl;
return 0;
}
//可以像用cin那样用ifstream对象
while (srcFile >> x) {
sum += x;
//可以像 cout 那样使用 ofstream 对象
destFile << x << " ";
}
cout << "sum:" << sum << endl;
destFile.close();
srcFile.close();
return 0;
}
执行此程序之前,必须在和该程序源文件同目录中手动创建一个 in.txt 文件,假设其内部存储的字符串为:
10 20 30 40 50
建立之后,执行程序,其执行结果为:
sum:150
同时在 in.txt 文件同目录下,会生成一个 out.txt 文件,其内部存储的字符和 in.txt 文件完全一样,可自行打开文件查看。
|