定义于头文件 <fstream>
template< class CharT, |
类模板 basic_ofstream
实现文件上基于流的高层输出操作。它将 std::basic_ostream 的高层接口赋予基于文件的流缓冲( std::basic_filebuf )。
std::basic_ofstream
典型实现只保有一个非导出成员: std::basic_filebuf<CharT, Traits> 的实例。
亦对常用字符类型定义二个特化:
类型 | 定义 |
ofstream | basic_ofstream<char> |
wofstream | basic_ofstream<wchar_t> |
文件操作
检查流是否有关联文件
std::basic_ofstream<CharT,Traits>::is_open
bool is_open(); | (C++11 前) | |
bool is_open() const; | (C++11 起) |
检查文件流是否有关联文件。
等效地调用 rdbuf()->is_open() 。
参数
(无)
返回值
若文件流有关联文件,则为 true ,否则为 false 。
调用示例
#include <fstream>
#include <utility>
#include <string>
#include <iostream>
int main()
{
std::ofstream ofstream1("test1.txt", std::ios::in);
std::ofstream ofstream2("test2.txt", std::ios::in);
std::ofstream ofstream3("test3.txt", std::ios::in);
std::cout << "ofstream1 is: "
<< (ofstream1.is_open() ? "true" : "false") << std::endl;
std::cout << "ofstream2 is: "
<< (ofstream2.is_open() ? "true" : "false") << std::endl;
std::cout << "ofstream3 is: "
<< (ofstream3.is_open() ? "true" : "false") << std::endl;
std::cout << std::endl;
return 0;
}
输出
打开文件,并将它与流关联
std::basic_ofstream<CharT,Traits>::open
void open( const char *filename, | (1) | |
void open( const std::filesystem::path::value_type *filename, | (2) | (C++17 起) |
void open( const std::string &filename, | (3) | (C++11 起) |
void open( const std::filesystem::path &filename, | (4) | (C++17 起) |
将名为 filename
的文件打开并与文件流关联。
失败时调用 setstate(failbit) 。
成功时调用 clear() 。 | (C++11 起) |
1-2) 等效地调用 rdbuf()->open(filename, mode | ios_base::out). (该调用效果上的细节见 std::basic_filebuf::open )。仅若 std::filesystem::path::value_type 非 char 才提供重载 (2) 。 (C++17 起)
3-4) 等效地调用 (1-2) ,如同以 open(filename.c_str(), mode) 。
参数
filename | - | 要打开的文件名 | ||||||||||||||
mode | - | 指定打开模式。它是位掩码类型,定义下列常量:
|
返回值
(无)
调用示例
#include <fstream>
#include <utility>
#include <string>
#include <iostream>
int main()
{
std::string strFileName1 = "test1.txt";
std::ofstream ofstream1;
//1-2) 等效地调用 rdbuf()->open(filename, mode | ios_base::out).
ofstream1.open(strFileName1.c_str(), std::ios::out);
std::ofstream ofstream2;
std::string strFileName2 = "test2.txt";
//3-4) 等效地调用 (1-2) ,如同以 open(filename.c_str(), mode) 。
ofstream2.open(strFileName2, std::ios::out);
std::ofstream ofstream3;
std::string strFileName3 = "test3.txt";
ofstream2.open(strFileName3, std::ios::out);
std::cout << "ofstream1 is: "
<< (ofstream1.is_open() ? "true" : "false") << std::endl;
std::cout << "ofstream2 is: "
<< (ofstream2.is_open() ? "true" : "false") << std::endl;
std::cout << "ofstream3 is: "
<< (ofstream3.is_open() ? "true" : "false") << std::endl;
std::cout << std::endl;
return 0;
}