C++打开文件

示例

对于所有3个文件流(,和)ifstream,打开文件的方式相同。ofstreamfstream

您可以直接在构造函数中打开文件:

std::ifstream ifs("foo.txt");  // ifstream: Opens file "foo.txt" for reading only.

std::ofstream ofs("foo.txt");  // ofstream: Opens file "foo.txt" for writing only.

std::fstream iofs("foo.txt");  // fstream:  Opens file "foo.txt" for reading and writing.

另外,您可以使用文件流的成员函数open():

std::ifstream ifs;
ifs.open("bar.txt");           // ifstream: Opens file "bar.txt" for reading only.

std::ofstream ofs;
ofs.open("bar.txt");           // ofstream: Opens file "bar.txt" for writing only.

std::fstream iofs;
iofs.open("bar.txt");          // fstream:  Opens file "bar.txt" for reading and writing.

您应该始终检查文件是否已成功打开(即使在写入时)。失败可能包括:文件不存在,文件没有正确的访问权限,文件已在使用中,发生磁盘错误,驱动器断开连接...可以按以下方式进行检查:

// 尝试读取文件“ foo.txt”。
std::ifstream ifs("fooo.txt");  //注意错别字;该文件无法打开。

// 检查文件是否已成功打开。
if (!ifs.is_open()) {
    //该文件尚未打开;在此处采取适当的措施。
    throw CustomException(ifs, "File could not be opened");
}

如果文件路径包含反斜杠(例如,在Windows系统上),则应正确转义它们:

// 在Windows上打开文件“ c:\ folder \ foo.txt”。
std::ifstream ifs("c:\\folder\\foo.txt"); // 使用转义的反斜杠

C ++ 11

或使用原始文字:

// 在Windows上打开文件“ c:\ folder \ foo.txt”。
std::ifstream ifs(R"(c:\folder\foo.txt)"); // 使用原始文字

或改用正斜杠:

// 在Windows上打开文件“ c:\ folder \ foo.txt”。
std::ifstream ifs("c:/folder/foo.txt");

C ++ 11

如果当前要在Windows上的路径中使用ASCII字符打开文件,则可以使用非标准的宽字符路径参数:

// 在Windows上打开文件'пример\ foo.txt'。
std::ifstream ifs(LR"(пример\foo.txt)"); // 使用带有原始文字的宽字符