定义于头文件
template< class CharT, |
类模板 basic_fstream
实现基于文件的流上的高层输入/输出。它将 std::basic_iostream 的高层接口赋予基于文件的缓冲( std::basic_filebuf )。
std::basic_fstream
的典型实现只保有一个非导出数据成员: std::basic_filebuf
亦定义二个对于常用字符类型的特化:
类型 | 定义 |
fstream |
basic_fstream |
wfstream |
basic_fstream |
std::basic_fstream::is_open
bool is_open(); |
(C++11 前) | |
bool is_open() const; |
(C++11 起) |
检查文件流是否有关联文件。
等效地调用 rdbuf()->is_open() 。
(无)
若文件流有关联文件,则为 true ,否则为 false 。
#include
#include
#include
#include
int main()
{
std::fstream fstream1("test1.txt", std::ios::in | std::ios::out);
std::fstream fstream2("test2.txt", std::ios::in | std::ios::out);
std::fstream fstream3("test3.txt", std::ios::in | std::ios::out);
std::cout << "fstream1 is: "
<< (fstream1.is_open() ? "true" : "false") << std::endl;
std::cout << "fstream2 is: "
<< (fstream2.is_open() ? "true" : "false") << std::endl;
std::cout << "fstream3 is: "
<< (fstream3.is_open() ? "true" : "false") << std::endl;
std::cout << std::endl;
return 0;
}
std::basic_fstream::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). (该调用效果上的细节见 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
#include
#include
#include
int main()
{
std::string strFileName1 = "test1.txt";
std::fstream fstream1;
//1-2) 等效地调用 rdbuf()->open(filename, mode ).
fstream1.open(strFileName1.c_str(), std::ios::in | std::ios::out);
std::fstream fstream2;
std::string strFileName2 = "test2.txt";
//3-4) 等效地调用 (1-2) ,如同以 open(filename.c_str(), mode) 。
fstream2.open(strFileName2, std::ios::in | std::ios::out);
std::fstream fstream3;
std::string strFileName3 = "test3.txt";
fstream2.open(strFileName3, std::ios::in | std::ios::out);
std::cout << "fstream1 is: "
<< (fstream1.is_open() ? "true" : "false") << std::endl;
std::cout << "fstream2 is: "
<< (fstream2.is_open() ? "true" : "false") << std::endl;
std::cout << "fstream3 is: "
<< (fstream3.is_open() ? "true" : "false") << std::endl;
std::cout << std::endl;
return 0;
}