西安行业网站,企业网站做seo,动态图表制作方法,苏州cms模板建站8.2 文件输入输出
头文件 fstream 定义了三个类型来之支持文件IO#xff0c;分别是#xff1a;
ifstream#xff1a;从一个给定文件读取数据#xff1b;ofstream#xff1a;向一个给定文件写入数据#xff1b;fstream#xff1a;读写给定文件。
在 C 当中#xff0c…8.2 文件输入输出
头文件 fstream 定义了三个类型来之支持文件IO分别是
ifstream从一个给定文件读取数据ofstream向一个给定文件写入数据fstream读写给定文件。
在 C 当中可以方便地使用 IO 运算符和对文件进行读写可以使用getline从一个 ifstream 读取数据。
8.2.1 使用文件流对象
当我们想要读写一个文件时可以定义一个文件流对象并将对象与文件关联起来。每个文件流类都定义了一个名为 open 的成员函数它可以完成一些系统相关的操作来定位给定文件并视情况打开为读或写模式。
创建文件流对象时我们可以提供文件名可选如果提供了文件名则 open 自动调用
ifstream in(ifile); // 构造一个 ifstream 并打开给定文件
ofstream out; // 输出文件流未关联到任何文件在 C 标准下文件名可以是 string 对象也可以是 C 风格的字符数组。
用 fstream 代替 iostream
在要求使用基类型对象的地方可以用继承类型的对象来替代。这意味着接受一个 iostream 类型引用参数的函数可以用一个对应的 fstream或sstream类型来调用。即如果一个函数接受 ostream 参数在调用这个函数时可以传递给它一个 ofstream 对象对 istream 和 ifstream 也是类似的。
成员函数 open 和 close
如果我们定义了一个空的文件流对象可以调用 open 来将它与文件关联起来
ifstream in(ifile);
ofstream out;
out.open(ifile .copy); // 打开指定文件如果调用 open 失败failbit 会被置位。因为 open 的调用可能失败所以对 open 进行检查是良好的习惯
if(out) // 检查 open 是否成功一旦一个文件流被打开他就将保持与对应文件的关联。对于一个已经打开的文件流如果再次调用 open将会失败并且 failbit 会被置位。为了将文件流关联到另一个文件必须首先关闭已经关联的文件。文件成功关闭之后我们才可以打开新的文件
in.close(); // 关闭文件
in.open(ifile 2); // 打开另一个文件自动构造和析构
如下例子的 main 函数将接受一个要处理的文件列表这种程序可能会出现如下循环
for(auto p argv 1; p ! argv argc; p) {ifstream input(*p); // 创建输出流并打开文件if(input) { // 如果文件成功打开, 处理该文件process(input); } else {cerr couldnt open : string(*p);}
} // 每个循环 step, input 都会离开作用域, 因此会被销毁由于 input 是 for 循环的局部变量它在每一个 step 都要创建和销毁一次。当一个 fstream 对象被销毁时close 会自动调用。
8.2 文件模式
每个流都有一个关联的文件模式file mode用来指出如何使用文件
in以读方式打开out以写方式打开app每次写操作前定位到文件末尾appendate打开文件后立即定位到文件末尾trunc截断文件binary以二进制方式进行 IO
每个文件流类型都定义了一个默认的文件模式如果未指定文件模式就是用默认模式。
以 out 模式打开文件会丢弃已有的数据
默认情况下当我们打开一个 ofstream 时文件的内容会被丢弃。阻止一个 ofstream 清空给定文件内容的方法是同时指定 app 模式
ofstream out(file1); // 隐含以输出模式打开文件并截断文件
ofstream out2(file1, ofstream::out); // 隐含地截断文件
ofstream out3(file1, ofstream::out | ofstream::trunc);
// 为了保留文件内容, 必须显式地指定 app 模式
ofstream app(file2, ofstream::app); // 隐含为输出模式
ofstream app2(file2, ofstream::out | ofstream::app);每次调用 open 时都会确定文件模式
对于一个给定流每当打开文件时都可以改变其文件模式
ofstream out;
out.open(scratchpad); // 模式隐含设置为输出和截断
out.close();
out.open(precious, ofstream::app); // 显式地设置为追加, 隐含输出
out.close();在每次打开文件时都要设置文件模式可能是显式地设置也可能是隐式地设置。当程序未指定模式时使用默认值。