📄 fstream
字号:
typedef basic_ostream<_Elem, _Traits> _Mybase;
typedef basic_filebuf<_Elem, _Traits> _Myfb;
typedef basic_ios<_Elem, _Traits> _Myios;
basic_ofstream()
: _Mybase(&_Filebuffer)
{ // construct unopened
}
explicit basic_ofstream(const char *_Filename,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot)
: _Mybase(&_Filebuffer)
{ // construct with named file and specified mode
if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
}
#if _HAS_CPP0X
explicit basic_ofstream(const string& _Str,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot)
: _Mybase(&_Filebuffer)
{ // construct with named file and specified mode
if (_Filebuffer.open(_Str.c_str(), _Mode | ios_base::out, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
}
#endif /* _HAS_CPP0X */
explicit basic_ofstream(const wchar_t *_Filename,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot)
: _Mybase(&_Filebuffer)
{ // construct with wide-named file -- EXTENSION
if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
}
#if _HAS_CPP0X
explicit basic_ofstream(const wstring& _Str,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot)
: _Mybase(&_Filebuffer)
{ // construct with wide-named file -- EXTENSION
if (_Filebuffer.open(_Str.c_str(), _Mode | ios_base::out, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
}
#endif /* _HAS_CPP0X */
#ifdef _NATIVE_WCHAR_T_DEFINED
explicit basic_ofstream(const unsigned short *_Filename,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot)
: _Mybase(&_Filebuffer)
{ // construct with wide-named file -- EXTENSION
if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
}
#endif /* _NATIVE_WCHAR_T_DEFINED */
explicit basic_ofstream(_Filet *_File)
: _Mybase(&_Filebuffer),
_Filebuffer(_File)
{ // construct with specified C stream
}
basic_ofstream(_Myt&& _Right)
: _Mybase(&_Filebuffer)
{ // construct by moving _Right
_Assign_rv(_STD forward<_Myt>(_Right));
}
_Myt& operator=(_Myt&& _Right)
{ // move from _Right
_Assign_rv(_STD forward<_Myt>(_Right));
return (*this);
}
void _Assign_rv(_Myt&& _Right)
{ // assign by moving _Right
if (this != &_Right)
{ // different, worth moving
_Filebuffer.close();
this->swap(_Right);
}
}
void swap(_Myt& _Right)
{ // swap with _Right
if (this != &_Right)
{ // different, swap base and buffer
_Mybase::swap(_Right);
_Filebuffer.swap(_Right._Filebuffer);
}
}
void swap(_Myt&& _Right)
{ // swap with _Right
_Assign_rv(_STD forward<_Myt>(_Right));
}
void open(const wchar_t *_Filename,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot)
{ // open a wide-named C stream -- EXTENSION
if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
else
_Myios::clear(); // added with C++0X
}
#if _HAS_CPP0X
void open(const wstring& _Str,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot)
{ // open a wide-named C stream -- EXTENSION
open(_Str.c_str(), _Mode, _Prot);
}
#endif /* _HAS_CPP0X */
void open(const wchar_t *_Filename, ios_base::open_mode _Mode)
{ // open a wide-named C stream (old style) -- EXTENSION
open(_Filename, (ios_base::openmode)_Mode);
}
#ifdef _NATIVE_WCHAR_T_DEFINED
void open(const unsigned short *_Filename,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot)
{ // open a wide-named C stream -- EXTENSION
if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
else
_Myios::clear(); // added with C++0X
}
void open(const unsigned short *_Filename,
ios_base::open_mode _Mode)
{ // open a wide-named C stream (old style) -- EXTENSION
open(_Filename, (ios_base::openmode)_Mode);
}
#endif /* _NATIVE_WCHAR_T_DEFINED */
virtual __CLR_OR_THIS_CALL ~basic_ofstream()
{ // destroy the object
}
_Myfb *rdbuf() const
{ // return pointer to file buffer
return ((_Myfb *)&_Filebuffer);
}
bool is_open() const
{ // test if C stream has been opened
return (_Filebuffer.is_open());
}
void open(const char *_Filename,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot)
{ // open a C stream with specified mode
if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
else
_Myios::clear(); // added with C++0X
}
#if _HAS_CPP0X
void open(const string& _Str,
ios_base::openmode _Mode = ios_base::out,
int _Prot = (int)ios_base::_Openprot)
{ // open a C stream with specified mode
open(_Str.c_str(), _Mode, _Prot);
}
#endif /* _HAS_CPP0X */
void open(const char *_Filename, ios_base::open_mode _Mode)
{ // open a C stream with specified mode (old style)
open(_Filename, (ios_base::openmode)_Mode);
}
void close()
{ // close the C stream
if (_Filebuffer.close() == 0)
_Myios::setstate(ios_base::failbit);
}
private:
_Myfb _Filebuffer; // the file buffer
};
// basic_ofstream TEMPLATE OPERATORS
template<class _Elem,
class _Traits> inline
void swap(basic_ofstream<_Elem, _Traits>& _Left,
basic_ofstream<_Elem, _Traits>& _Right)
{ // swap _Left and _Right basic_ofstreams
_Left.swap(_Right);
}
template<class _Elem,
class _Traits> inline
void swap(basic_ofstream<_Elem, _Traits>& _Left,
basic_ofstream<_Elem, _Traits>&& _Right)
{ // swap _Left and _Right basic_ofstreams
typedef basic_ofstream<_Elem, _Traits> _Myt;
_Left.swap(_STD forward<_Myt>(_Right));
}
template<class _Elem,
class _Traits> inline
void swap(basic_ofstream<_Elem, _Traits>&& _Left,
basic_ofstream<_Elem, _Traits>& _Right)
{ // swap _Left and _Right basic_ofstreams
typedef basic_ofstream<_Elem, _Traits> _Myt;
_Right.swap(_STD forward<_Myt>(_Left));
}
// TEMPLATE CLASS basic_fstream
template<class _Elem,
class _Traits>
class basic_fstream
: public basic_iostream<_Elem, _Traits>
{ // input/output stream associated with a C stream
public:
typedef basic_fstream<_Elem, _Traits> _Myt;
typedef basic_iostream<_Elem, _Traits> _Mybase;
typedef basic_filebuf<_Elem, _Traits> _Myfb;
typedef basic_ios<_Elem, _Traits> _Myios;
typedef _Elem char_type;
typedef _Traits traits_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
basic_fstream()
: _Mybase(&_Filebuffer)
{ // construct unopened
}
explicit basic_fstream(const char *_Filename,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot)
: _Mybase(&_Filebuffer)
{ // construct with named file and specified mode
if (_Filebuffer.open(_Filename, _Mode, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
}
#if _HAS_CPP0X
explicit basic_fstream(const string& _Str,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot)
: _Mybase(&_Filebuffer)
{ // construct with named file and specified mode
if (_Filebuffer.open(_Str.c_str(), _Mode, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
}
#endif /* _HAS_CPP0X */
explicit basic_fstream(const wchar_t *_Filename,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot)
: _Mybase(&_Filebuffer)
{ // construct with wide-named file -- EXTENSION
if (_Filebuffer.open(_Filename, _Mode, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
}
#if _HAS_CPP0X
explicit basic_fstream(const wstring& _Str,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot)
: _Mybase(&_Filebuffer)
{ // construct with wide-named file -- EXTENSION
if (_Filebuffer.open(_Str.c_str(), _Mode, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
}
#endif /* _HAS_CPP0X */
#ifdef _NATIVE_WCHAR_T_DEFINED
explicit basic_fstream(const unsigned short *_Filename,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot)
: _Mybase(&_Filebuffer)
{ // construct with wide-named file -- EXTENSION
if (_Filebuffer.open(_Filename, _Mode, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
}
#endif /* _NATIVE_WCHAR_T_DEFINED */
explicit basic_fstream(_Filet *_File)
: _Mybase(&_Filebuffer),
_Filebuffer(_File)
{ // construct with specified C stream
}
basic_fstream(_Myt&& _Right)
: _Mybase(&_Filebuffer)
{ // construct by moving _Right
_Assign_rv(_STD forward<_Myt>(_Right));
}
_Myt& operator=(_Myt&& _Right)
{ // move from _Right
_Assign_rv(_STD forward<_Myt>(_Right));
return (*this);
}
void _Assign_rv(_Myt&& _Right)
{ // assign by moving _Right
if (this != &_Right)
{ // different, worth moving
_Filebuffer.close();
this->swap(_Right);
}
}
void swap(_Myt& _Right)
{ // swap with _Right
if (this != &_Right)
{ // different, swap base and buffer
_Mybase::swap(_Right);
_Filebuffer.swap(_Right._Filebuffer);
}
}
void swap(_Myt&& _Right)
{ // swap with _Right
_Assign_rv(_STD forward<_Myt>(_Right));
}
void open(const wchar_t *_Filename,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot)
{ // open a wide-named C stream -- EXTENSION
if (_Filebuffer.open(_Filename, _Mode, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
else
_Myios::clear(); // added with C++0X
}
#if _HAS_CPP0X
void open(const wstring& _Str,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot)
{ // open a wide-named C stream -- EXTENSION
open(_Str.c_str(), _Mode, _Prot);
}
#endif /* _HAS_CPP0X */
void open(const wchar_t *_Filename, ios_base::open_mode _Mode)
{ // open a wide-named C stream (old style) -- EXTENSION
open(_Filename, (ios_base::openmode)_Mode);
}
#ifdef _NATIVE_WCHAR_T_DEFINED
void open(const unsigned short *_Filename,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot)
{ // open a wide-named C stream -- EXTENSION
if (_Filebuffer.open(_Filename, _Mode, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
else
_Myios::clear(); // added with C++0X
}
void open(const unsigned short *_Filename,
ios_base::open_mode _Mode)
{ // open a wide-named C stream (old style) -- EXTENSION
open(_Filename, (ios_base::openmode)_Mode);
}
#endif /* _NATIVE_WCHAR_T_DEFINED */
virtual __CLR_OR_THIS_CALL ~basic_fstream()
{ // destroy the object
}
_Myfb *rdbuf() const
{ // return pointer to file buffer
return ((_Myfb *)&_Filebuffer);
}
bool is_open() const
{ // test if C stream has been opened
return (_Filebuffer.is_open());
}
void open(const char *_Filename,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot)
{ // open a C stream with specified mode
if (_Filebuffer.open(_Filename, _Mode, _Prot) == 0)
_Myios::setstate(ios_base::failbit);
else
_Myios::clear(); // added with C++0X
}
#if _HAS_CPP0X
void open(const string& _Str,
ios_base::openmode _Mode = ios_base::in | ios_base::out,
int _Prot = (int)ios_base::_Openprot)
{ // open a C stream with specified mode
open(_Str.c_str(), _Mode, _Prot);
}
#endif /* _HAS_CPP0X */
void open(const char *_Filename, ios_base::open_mode _Mode)
{ // open a C stream with specified mode (old style)
open(_Filename, (ios_base::openmode)_Mode);
}
void close()
{ // close the C stream
if (_Filebuffer.close() == 0)
_Myios::setstate(ios_base::failbit);
}
private:
_Myfb _Filebuffer; // the file buffer
};
// basic_fstream TEMPLATE OPERATORS
template<class _Elem,
class _Traits> inline
void swap(basic_fstream<_Elem, _Traits>& _Left,
basic_fstream<_Elem, _Traits>& _Right)
{ // swap _Left and _Right basic_fstreams
_Left.swap(_Right);
}
template<class _Elem,
class _Traits> inline
void swap(basic_fstream<_Elem, _Traits>& _Left,
basic_fstream<_Elem, _Traits>&& _Right)
{ // swap _Left and _Right basic_fstreams
typedef basic_fstream<_Elem, _Traits> _Myt;
_Left.swap(_STD forward<_Myt>(_Right));
}
template<class _Elem,
class _Traits> inline
void swap(basic_fstream<_Elem, _Traits>&& _Left,
basic_fstream<_Elem, _Traits>& _Right)
{ // swap _Left and _Right basic_fstreams
typedef basic_fstream<_Elem, _Traits> _Myt;
_Right.swap(_STD forward<_Myt>(_Left));
}
_STD_END
#pragma warning(pop)
#pragma pack(pop)
#endif /* RC_INVOKED */
#endif /* _FSTREAM_ */
/*
* Copyright (c) 1992-2009 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
V5.20:0009 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -