首页 > 编程笔记 > C++笔记 阅读:2

C++打开文件的2种方式(附带实例)

在对文件进行读、写操作前,先要打开文件。打开文件的目的有两个:
打开文件的方式有两种:

open()打开文件

以 ifstream 类为例,该类有一个 open() 成员函数,其有两个参数,第一个参数是指向文件名的指针,第二个参数是文件的打开模式标记。其他两个文件流类也有同样的 open() 成员函数。

因此,调用流对象的 open() 成员函数打开文件的语法形式如下:
<文件流对象名>.open(<文件名>,<打开模式>);

下表中列出了各种模式标记单独使用或组合使用时的作用。

表:文件打开模式标记
打开模式 适用对象 作用
ios::in ifstream fstream 打开文件,以读取数据。如果文件不存在,则打开出错
ios::out ofstream fstream 打开文件,以写入数据。如果文件不存在,则新建该文件;如果文件存在,则打开时清除原有的内容
ios::app ofstream fstream 打开文件,在尾部添加数据。如果文件不存在,则新建该文件
ios::ate ifstream ofstream fstream 打开已存在的文件,将文件读指针指向文件末尾。如果文件不存在,则打开出错
ios::trunc ofstream 打开文件时,清空存储的所有数据(单独使用时与 ios::out 相同)
ios::binary ifstream ofstream fstream 以二进制方式打开文件。若不指定此模式,则以文本模式打开文件
ios::in | ios::out fstream 打开已存在的文件,既可读取其内容,也可向其写入数据。文件刚打开时,原有内容保持不变。如果文件不存在,则打开出错
ios::in | ios::out ofstream 打开已存在的文件,向其写入数据。文件刚打开时,原有内容保持不变。如果文件不存在,则打开出错
ios::in | ios::out | ios::trunc fstream 打开文件,既可读取其内容,也可向其写入数据。如果文件本来就存在,则打开时清除原来的内容;如果文件不存在,则新建该文件

调用 open() 成员函数时,给出的文件名可以是绝对路径,如 c:\\tmp\\test.txt;也可以是相对路径,即只给出文件名,如 test.txt,此时程序会在当前文件夹(也就是可执行程序所在的文件夹)中寻找要打开的文件。

例如,打开 test.txt 文件,进行写操作,代码如下:
ifstream infile;
infile.open("test.txt",ios::out);

通过构造函数打开文件

创建文件流时,可利用其构造函数打开文件,即在创建流时加入参数。语法结构如下:
<文件流类> <文件流对象名>(<文件名>,<打开模式>)
其中,文件流类可以是 fstream、ifstream 和 ofstream 中的一种。

使用相对路径打开文件 test.txt,进行写操作,代码如下:
ofstream outfile("test.txt",ios::out);

使用绝对路径打开文件 test.txt,进行写操作,代码如下:
ofstream outfile("c::\\test.txt",ios::out);
注意,字符“\”表示转义,如果使用“c:\”则必须写成“c:\\”。

当不再对打开的文件进行任何操作时,应及时调用 close() 成员函数关闭文件。

【实例】创建两个文件 test.txt 和 test2.txt,向文件写入字符串,代码如下:
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ofstream ofile;

    cout << "Create file1" << endl;
    ofile.open("test.txt");
    if (!ofile.fail())
    {
        ofile << "name1" << " ";
        ofile << "sex1" << " ";
        ofile << "age1";
        ofile.close();
        cout << "Create file2" << endl;
        ofile.open("test2.txt");
        if (!ofile.fail())
        {
            ofile << "name2" << "";
            ofile << "sex2" << "";
            ofile << "age2";
            ofile.close();
        }  
    }
    return 0;
}
程序运行将创建两个文件,ofstream 默认打开方式是 std::ios::out | std::ios::trunk,因此当文件夹内没有 test.txt 文件和 test2.txt 文件时,会创建这两个文件,并向文件写入字符串:
如果文件夹内有 test.txt 文件和 test2.txt 文件,则覆盖原有文件内容。

相关文章