日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

c++标准库fstream文件

發(fā)布時間:2023/12/13 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 c++标准库fstream文件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

// fstream standard header

// Copyright (c) Microsoft Corporation.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

#pragma once
#ifndef _FSTREAM_
#define _FSTREAM_
#include <yvals_core.h>
#if _STL_COMPILER_PREPROCESSOR
#include <istream>

#pragma pack(push, _CRT_PACKING)
#pragma warning(push, _STL_WARNING_LEVEL)
#pragma warning(disable : _STL_DISABLED_WARNINGS)
_STL_DISABLE_CLANG_WARNINGS
#pragma push_macro("new")
#undef new

// TRANSITION, ABI: The _Path_ish functions accepting filesystem::path or experimental::filesystem::path are templates
// which always use the same types as a workaround for user code deriving from iostreams types and
// __declspec(dllexport)ing the derived types. Adding member functions to iostreams broke the ABI of such DLLs.
// Deriving and __declspec(dllexport)ing standard library types is not supported, but in this particular case
// the workaround was inexpensive. The workaround will be removed in the next ABI breaking release of the
// Visual C++ Libraries.
_STD_BEGIN
#if _HAS_CXX17
namespace filesystem {
    class path;
}
#endif // _HAS_CXX17

#ifndef _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM
#ifdef _M_CEE
#define _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM 0
#else // _M_CEE
#define _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM 1
#endif // _M_CEE
#endif // _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM

#if _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM
namespace experimental {
    namespace filesystem {
        inline namespace v1 {
            class path;
        }
    } // namespace filesystem
} // namespace experimental
#endif // _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM

extern _CRTIMP2_PURE FILE* __CLRCALL_PURE_OR_CDECL _Fiopen(const char*, ios_base::openmode, int);
extern _CRTIMP2_PURE FILE* __CLRCALL_PURE_OR_CDECL _Fiopen(const wchar_t*, ios_base::openmode, int);

#ifdef _NATIVE_WCHAR_T_DEFINED
extern _CRTIMP2_PURE FILE* __CLRCALL_PURE_OR_CDECL _Fiopen(const unsigned short*, ios_base::openmode, int);
#endif // _NATIVE_WCHAR_T_DEFINED

// FUNCTION TEMPLATE _Fgetc
template <class _Elem>
bool _Fgetc(_Elem& _Ch, FILE* _File) { // get an element from a C stream
    return _CSTD fread(&_Ch, sizeof(_Elem), 1, _File) == 1;
}

template <>
inline bool _Fgetc(char& _Byte, FILE* _File) { // get a char element from a C stream
    int _Meta;
    if ((_Meta = _CSTD fgetc(_File)) == EOF) {
        return false;
    } else { // got one, convert to char
        _Byte = static_cast<char>(_Meta);
        return true;
    }
}

template <>
inline bool _Fgetc(wchar_t& _Wchar, FILE* _File) { // get a wchar_t element from a C stream
    wint_t _Meta;
    if ((_Meta = _CSTD fgetwc(_File)) == WEOF) {
        return false;
    } else { // got one, convert to wchar_t
        _Wchar = static_cast<wchar_t>(_Meta);
        return true;
    }
}

#ifdef _NATIVE_WCHAR_T_DEFINED
template <>
inline bool _Fgetc(unsigned short& _Wchar, FILE* _File) { // get an unsigned short element from a C stream
    wint_t _Meta;
    if ((_Meta = _CSTD fgetwc(_File)) == WEOF) {
        return false;
    } else { // got one, convert to unsigned short
        _Wchar = static_cast<unsigned short>(_Meta);
        return true;
    }
}
#endif // _NATIVE_WCHAR_T_DEFINED

// FUNCTION TEMPLATE _Fputc
template <class _Elem>
bool _Fputc(_Elem _Ch, FILE* _File) { // put an element to a C stream
    return _CSTD fwrite(&_Ch, 1, sizeof(_Elem), _File) == sizeof(_Elem);
}

template <>
inline bool _Fputc(char _Byte, FILE* _File) { // put a char element to a C stream
    return _CSTD fputc(_Byte, _File) != EOF;
}

template <>
inline bool _Fputc(wchar_t _Wchar, FILE* _File) { // put a wchar_t element to a C stream
    return _CSTD fputwc(_Wchar, _File) != WEOF;
}

#ifdef _NATIVE_WCHAR_T_DEFINED
template <>
inline bool _Fputc(unsigned short _Wchar, FILE* _File) { // put an unsigned short element to a C stream
    return _CSTD fputwc(_Wchar, _File) != WEOF;
}
#endif // _NATIVE_WCHAR_T_DEFINED

// FUNCTION TEMPLATE _Ungetc
template <class _Elem>
bool _Ungetc(const _Elem&, FILE*) { // put back an arbitrary element to a C stream (always fail)
    return false;
}

template <>
inline bool _Ungetc(const char& _Byte, FILE* _File) { // put back a char element to a C stream
    return _CSTD ungetc(static_cast<unsigned char>(_Byte), _File) != EOF;
}

template <>
inline bool _Ungetc(const signed char& _Byte, FILE* _File) { // put back a signed char element to a C stream
    return _CSTD ungetc(static_cast<unsigned char>(_Byte), _File) != EOF;
}

template <>
inline bool _Ungetc(const unsigned char& _Byte, FILE* _File) { // put back an unsigned char element to a C stream
    return _CSTD ungetc(_Byte, _File) != EOF;
}

template <>
inline bool _Ungetc(const wchar_t& _Wchar, FILE* _File) { // put back a wchar_t element to a C stream
    return _CSTD ungetwc(_Wchar, _File) != WEOF;
}

#ifdef _NATIVE_WCHAR_T_DEFINED
template <>
inline bool _Ungetc(const unsigned short& _Wchar, FILE* _File) { // put back an unsigned short element to a C stream
    return _CSTD ungetwc(_Wchar, _File) != WEOF;
}
#endif // _NATIVE_WCHAR_T_DEFINED

// CLASS TEMPLATE basic_filebuf
template <class _Elem, class _Traits>
class basic_filebuf : public basic_streambuf<_Elem, _Traits> { // stream buffer associated with a C stream
public:
    using _Mysb = basic_streambuf<_Elem, _Traits>;
    using _Cvt  = codecvt<_Elem, char, typename _Traits::state_type>;

    basic_filebuf() : _Mysb() {
        _Init(nullptr, _Newfl);
    }

    explicit basic_filebuf(FILE* const _File) : _Mysb() { // extension
        _Init(_File, _Newfl);
    }

    virtual __CLR_OR_THIS_CALL ~basic_filebuf() noexcept {
        if (_Myfile) {
            _Reset_back(); // revert from _Mychar buffer
        }

        if (_Closef) {
            close();
        }
    }

    using int_type = typename _Traits::int_type;
    using pos_type = typename _Traits::pos_type;
    using off_type = typename _Traits::off_type;

    basic_filebuf(_Uninitialized) : _Mysb(_Noinit) {}

    basic_filebuf(basic_filebuf&& _Right) {
        _Init(_Right._Myfile, _Newfl); // match buffering styles
        _Init(static_cast<FILE*>(nullptr), _Closefl); // then make *this look closed
        _Assign_rv(_STD move(_Right));
    }

    basic_filebuf& operator=(basic_filebuf&& _Right) {
        _Assign_rv(_STD move(_Right));
        return *this;
    }

    void _Assign_rv(basic_filebuf&& _Right) {
        if (this != _STD addressof(_Right)) {
            close();
            this->swap(_Right);
        }
    }

    void swap(basic_filebuf& _Right) {
        if (this != _STD addressof(_Right)) {
            FILE* _Myfile_sav                       = _Myfile;
            const _Cvt* _Pcvt_sav                   = _Pcvt;
            typename _Traits::state_type _State_sav = _State;
            bool _Wrotesome_sav                     = _Wrotesome;
            bool _Closef_sav                        = _Closef;
            bool _Set_eback_sav                     = _Mysb::eback() == &_Mychar;
            bool _Set_eback_live                    = _Mysb::gptr() == &_Mychar;

            _Elem* _Pfirst0 = _Mysb::pbase();
            _Elem* _Pnext0  = _Mysb::pptr();
            _Elem* _Pend    = _Mysb::epptr();
            _Elem* _Gfirst0 = _Mysb::eback();
            _Elem* _Gnext0  = _Mysb::gptr();
            _Elem* _Gend    = _Mysb::egptr();

            // reinitialize *this
            _Init(_Right._Myfile, _Right._Myfile ? _Openfl : _Newfl);
            _Mysb::setp(_Right.pbase(), _Right.pptr(), _Right.epptr());
            if (_Right.eback() != &_Right._Mychar) {
                _Mysb::setg(_Right.eback(), _Right.gptr(), _Right.egptr());
            } else if (_Right.gptr() != &_Right._Mychar) {
                _Mysb::setg(&_Mychar, &_Mychar + 1, &_Mychar + 1);
            } else {
                _Mysb::setg(&_Mychar, &_Mychar, &_Mychar + 1);
            }

            _Pcvt      = _Right._Pcvt;
            _State     = _Right._State;
            _Wrotesome = _Right._Wrotesome;
            _Closef    = _Right._Closef;

            // reinitialize _Right
            _Right._Init(_Myfile_sav, _Myfile_sav ? _Openfl : _Newfl);
            _Right.setp(_Pfirst0, _Pnext0, _Pend);
            if (!_Set_eback_sav) {
                _Right.setg(_Gfirst0, _Gnext0, _Gend);
            } else if (!_Set_eback_live) {
                _Right.setg(&_Right._Mychar, &_Right._Mychar + 1, &_Right._Mychar + 1);
            } else {
                _Right.setg(&_Right._Mychar, &_Right._Mychar, &_Right._Mychar + 1);
            }

            _Right._Pcvt      = _Pcvt_sav;
            _Right._State     = _State_sav;
            _Right._Wrotesome = _Wrotesome_sav;
            _Right._Closef    = _Closef_sav;

            // swap ancillary data
            _STD swap(_Set_eback, _Right._Set_eback);
            _STD swap(_Set_egptr, _Right._Set_egptr);

            _STD swap(_Mychar, _Right._Mychar);
            _STD swap(_Mysb::_Plocale, _Right._Plocale);
        }
    }

    basic_filebuf(const basic_filebuf&) = delete;
    basic_filebuf& operator=(const basic_filebuf&) = delete;

    enum _Initfl { // reasons for a call to _Init
        _Newfl,
        _Openfl,
        _Closefl
    };

    _NODISCARD bool is_open() const {
        return static_cast<bool>(_Myfile);
    }

    basic_filebuf* open(const char* _Filename, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        if (_Myfile) {
            return nullptr;
        }

        const auto _File = _Fiopen(_Filename, _Mode, _Prot);
        if (!_File) {
            return nullptr; // open failed
        }

        _Init(_File, _Openfl);
        _Initcvt(_STD use_facet<_Cvt>(_Mysb::getloc()));
        return this; // open succeeded
    }

    basic_filebuf* open(const string& _Str, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        return open(_Str.c_str(), _Mode, _Prot);
    }

#if _HAS_OLD_IOSTREAMS_MEMBERS
    basic_filebuf* open(const char* _Filename, ios_base::open_mode _Mode) {
        return open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS

    basic_filebuf* open(const wchar_t* _Filename, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Myfile) {
            return nullptr;
        }

        const auto _File = _Fiopen(_Filename, _Mode, _Prot);
        if (!_File) {
            return nullptr; // open failed
        }

        _Init(_File, _Openfl);
        _Initcvt(_STD use_facet<_Cvt>(_Mysb::getloc()));
        return this; // open succeeded
    }

    basic_filebuf* open(const wstring& _Str, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {
        // extension
        return open(_Str.c_str(), _Mode, _Prot);
    }

#if _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM
    template <class _Path_ish = experimental::filesystem::path>
    basic_filebuf* open(
        const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        return open(_Path.c_str(), _Mode, _Prot);
    }
#endif // _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM

#if _HAS_CXX17
    template <int = 0, class _Path_ish = filesystem::path>
    basic_filebuf* open(
        const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        return open(_Path.c_str(), _Mode, _Prot);
    }
#endif // _HAS_CXX17

#if _HAS_OLD_IOSTREAMS_MEMBERS
    basic_filebuf* open(const wchar_t* _Filename, ios_base::open_mode _Mode) {
        // in standard as const std::filesystem::path::value_type *
        return open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS

#ifdef _NATIVE_WCHAR_T_DEFINED
    basic_filebuf* open(
        const unsigned short* _Filename, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Myfile) {
            return nullptr;
        }

        const auto _File = _Fiopen(_Filename, _Mode, _Prot);
        if (!_File) {
            return nullptr; // open failed
        }

        _Init(_File, _Openfl);
        _Initcvt(_STD use_facet<_Cvt>(_Mysb::getloc()));
        return this; // open succeeded
    }

#if _HAS_OLD_IOSTREAMS_MEMBERS
    basic_filebuf* open(const unsigned short* _Filename, ios_base::open_mode _Mode) {
        // in standard as const std::filesystem::path::value_type *
        return open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS
#endif // _NATIVE_WCHAR_T_DEFINED

    basic_filebuf* close() {
        basic_filebuf* _Ans;
        if (_Myfile) { // put any homing sequence and close file
            _Ans = this;
            if (!_Endwrite()) {
                _Ans = nullptr;
            }

            if (_CSTD fclose(_Myfile) != 0) {
                _Ans = nullptr;
            }
        } else {
            _Ans = nullptr;
        }

        _Init(nullptr, _Closefl);
        return _Ans;
    }

    virtual void __CLR_OR_THIS_CALL _Lock() override { // lock file instead of stream buffer
        if (_Myfile) {
            _CSTD _lock_file(_Myfile);
        }
    }

    virtual void __CLR_OR_THIS_CALL _Unlock() override { // unlock file instead of stream buffer
        if (_Myfile) {
            _CSTD _unlock_file(_Myfile);
        }
    }

protected:
    virtual int_type __CLR_OR_THIS_CALL overflow(int_type _Meta = _Traits::eof()) override { // put an element to stream
        if (_Traits::eq_int_type(_Traits::eof(), _Meta)) {
            return _Traits::not_eof(_Meta); // EOF, return success code
        }

        if (_Mysb::pptr() && _Mysb::pptr() < _Mysb::epptr()) { // room in buffer, store it
            *_Mysb::_Pninc() = _Traits::to_char_type(_Meta);
            return _Meta;
        }

        if (!_Myfile) {
            return _Traits::eof(); // no open C stream, fail
        }

        _Reset_back(); // revert from _Mychar buffer
        if (!_Pcvt) { // no codecvt facet, put as is
            return _Fputc(_Traits::to_char_type(_Meta), _Myfile) ? _Meta : _Traits::eof();
        }

        // put using codecvt facet
        constexpr size_t _Codecvt_temp_buf = 32;
        char _Str[_Codecvt_temp_buf];
        const _Elem _Ch = _Traits::to_char_type(_Meta);
        const _Elem* _Src;
        char* _Dest;
        switch (_Pcvt->out(_State, &_Ch, &_Ch + 1, _Src, _Str, _Str + _Codecvt_temp_buf,
            _Dest)) { // test result of converting one element
        case codecvt_base::partial:
        case codecvt_base::ok: { // converted something, try to put it out
            const auto _Count = static_cast<size_t>(_Dest - _Str);
            if (0 < _Count && _Count != static_cast<size_t>(_CSTD fwrite(_Str, 1, _Count, _Myfile))) {
                return _Traits::eof(); // write failed
            }

            _Wrotesome = true; // write succeeded
            if (_Src != &_Ch) {
                return _Meta; // converted whole element
            }

            return _Traits::eof(); // conversion failed
        }

        case codecvt_base::noconv:
            // no conversion, put as is
            return _Fputc(_Ch, _Myfile) ? _Meta : _Traits::eof();

        default:
            return _Traits::eof(); // conversion failed
        }
    }

    virtual int_type __CLR_OR_THIS_CALL pbackfail(int_type _Meta = _Traits::eof()) override {
        // put an element back to stream
        if (_Mysb::gptr() && _Mysb::eback() < _Mysb::gptr()
            && (_Traits::eq_int_type(_Traits::eof(), _Meta)
                || _Traits::eq_int_type(_Traits::to_int_type(_Mysb::gptr()[-1]),
                    _Meta))) { // just back up position
            _Mysb::_Gndec();
            return _Traits::not_eof(_Meta);
        } else if (!_Myfile || _Traits::eq_int_type(_Traits::eof(), _Meta)) {
            return _Traits::eof(); // no open C stream or EOF, fail
        } else if (!_Pcvt && _Ungetc(_Traits::to_char_type(_Meta), _Myfile)) {
            return _Meta; // no facet and unget succeeded, return
        } else if (_Mysb::gptr() != &_Mychar) { // putback to _Mychar
            _Mychar = _Traits::to_char_type(_Meta);
            _Set_back(); // switch to _Mychar buffer
            return _Meta;
        } else {
            return _Traits::eof(); // nowhere to put back
        }
    }

    virtual int_type __CLR_OR_THIS_CALL underflow() override { // get an element from stream, but don't point past it
        int_type _Meta;
        if (_Mysb::gptr() && _Mysb::gptr() < _Mysb::egptr()) {
            return _Traits::to_int_type(*_Mysb::gptr()); // return buffered
        } else if (_Traits::eq_int_type(_Traits::eof(), _Meta = uflow())) {
            return _Meta; // uflow failed, return EOF
        } else { // get a char, don't point past it
            pbackfail(_Meta);
            return _Meta;
        }
    }

    virtual int_type __CLR_OR_THIS_CALL uflow() override { // get an element from stream, point past it
        if (_Mysb::gptr() && _Mysb::gptr() < _Mysb::egptr()) {
            return _Traits::to_int_type(*_Mysb::_Gninc()); // return buffered
        }

        if (!_Myfile) {
            return _Traits::eof(); // no open C stream, fail
        }

        _Reset_back(); // revert from _Mychar buffer
        if (!_Pcvt) { // no codecvt facet, just get it
            _Elem _Ch;
            return _Fgetc(_Ch, _Myfile) ? _Traits::to_int_type(_Ch) : _Traits::eof();
        }

        // build string until codecvt succeeds
        string _Str;

        for (;;) { // get using codecvt facet
            const char* _Src;
            int _Meta = _CSTD fgetc(_Myfile);

            if (_Meta == EOF) {
                return _Traits::eof(); // partial char?
            }

            _Str.push_back(static_cast<char>(_Meta)); // append byte and convert

            _Elem _Ch;
            _Elem* _Dest;
            switch (_Pcvt->in(_State, _Str.data(), _Str.data() + _Str.size(), _Src, &_Ch, &_Ch + 1,
                _Dest)) { // test result of converting one element
            case codecvt_base::partial:
            case codecvt_base::ok:
                if (_Dest != &_Ch) { // got an element, put back excess and deliver it
                    auto _Nleft = _Str.data() + _Str.size() - _Src;
                    while (0 < _Nleft) {
                        _CSTD ungetc(_Src[--_Nleft], _Myfile);
                    }

                    return _Traits::to_int_type(_Ch);
                }

                _Str.erase(0, static_cast<size_t>(_Src - _Str.data())); // partial, discard used input
                break;

            case codecvt_base::noconv:
                // noconv is only possible if _Elem is char, so we can use it directly
                return static_cast<int_type>(_Str.front());

            default:
                return _Traits::eof(); // conversion failed
            }
        }
    }

#pragma warning(push)
#pragma warning(disable : 4127) // conditional expression is constant
    virtual streamsize __CLR_OR_THIS_CALL xsgetn(_Elem* _Ptr, streamsize _Count) override {
        // get _Count characters from stream
        if
            _CONSTEXPR_IF(sizeof(_Elem) == 1) {
                if (_Count <= 0) {
                    return 0;
                }

                if (_Pcvt) { // if we need a nontrivial codecvt transform, do the default expensive thing
                    return _Mysb::xsgetn(_Ptr, _Count);
                }

                // assuming this is OK because _Ptr + _Count must be valid
                auto _Count_s           = static_cast<size_t>(_Count);
                const auto _Start_count = _Count;
                const auto _Available   = static_cast<size_t>(_Mysb::_Gnavail());
                if (0 < _Available) { // copy from get area
                    const auto _Read_size = _Min_value(_Count_s, _Available);
                    _Traits::copy(_Ptr, _Mysb::gptr(), _Read_size);
                    _Ptr += _Read_size;
                    _Count_s -= _Read_size;
                    _Mysb::gbump(static_cast<int>(_Read_size));
                }

                if (_Myfile) { // open C stream, attempt read
                    _Reset_back(); // revert from _Mychar buffer
                    // process in 4k - 1 chunks to avoid tripping over fread's clobber-the-end behavior when
                    // doing 
 -> 
 translation
                    constexpr size_t _Read_size = 4095; // _INTERNAL_BUFSIZ - 1
                    while (_Read_size < _Count_s) {
                        const auto _Actual_read = _CSTD fread(_Ptr, sizeof(_Elem), _Read_size, _Myfile);
                        _Ptr += _Actual_read;
                        _Count_s -= _Actual_read;
                        if (_Actual_read != _Read_size) {
                            return static_cast<streamsize>(_Start_count - _Count_s);
                        }
                    }

                    if (0 < _Count_s) {
                        _Count_s -= _CSTD fread(_Ptr, sizeof(_Elem), _Count_s, _Myfile);
                    }
                }

                return static_cast<streamsize>(_Start_count - _Count_s);
            }
        else { // non-chars always get element-by-element processing
            return _Mysb::xsgetn(_Ptr, _Count);
        }
    }

    virtual streamsize __CLR_OR_THIS_CALL xsputn(const _Elem* _Ptr, streamsize _Count) override {
        // put _Count characters to stream
        if
            _CONSTEXPR_IF(sizeof(_Elem) == 1) {
                if (_Pcvt) { // if we need a nontrivial codecvt transform, do the default expensive thing
                    return _Mysb::xsputn(_Ptr, _Count);
                }

                const streamsize _Start_count = _Count;
                streamsize _Size              = _Mysb::_Pnavail();
                if (0 < _Count && 0 < _Size) { // copy to write buffer
                    if (_Count < _Size) {
                        _Size = _Count;
                    }

                    _Traits::copy(_Mysb::pptr(), _Ptr, static_cast<size_t>(_Size));
                    _Ptr += _Size;
                    _Count -= _Size;
                    _Mysb::pbump(static_cast<int>(_Size));
                }

                if (0 < _Count && _Myfile) { // open C stream, attempt write
                    _Count -= _CSTD fwrite(_Ptr, sizeof(_Elem), static_cast<size_t>(_Count), _Myfile);
                }

                return _Start_count - _Count;
            }
        else { // non-chars always get element-by-element processing
            return _Mysb::xsputn(_Ptr, _Count);
        }
    }
#pragma warning(pop)

    virtual pos_type __CLR_OR_THIS_CALL seekoff(off_type _Off, ios_base::seekdir _Way,
        ios_base::openmode = ios_base::in | ios_base::out) override { // change position by _Off
        fpos_t _Fileposition;

        if (_Mysb::gptr() == &_Mychar // something putback
            && _Way == ios_base::cur // a relative seek
            && !_Pcvt) { // not converting
            _Off -= static_cast<off_type>(sizeof(_Elem)); // back up over _Elem bytes
        }

        if (!_Myfile || !_Endwrite()
            || ((_Off != 0 || _Way != ios_base::cur) && _CSTD _fseeki64(_Myfile, _Off, _Way) != 0)
            || _CSTD fgetpos(_Myfile, &_Fileposition) != 0) {
            return pos_type(-1); // report failure
        }

        _Reset_back(); // revert from _Mychar buffer, discarding any putback
        return pos_type(_State, _Fileposition); // return new position
    }

    virtual pos_type __CLR_OR_THIS_CALL seekpos(
        pos_type _Pos, ios_base::openmode = ios_base::in | ios_base::out) override {
        // change position to _Pos
        off_type _Off = static_cast<off_type>(_Pos);

        if (!_Myfile || !_Endwrite() || _CSTD fsetpos(_Myfile, &_Off) != 0) {
            return pos_type(-1); // report failure
        }

        _State = _Pos.state();
        _Reset_back(); // revert from _Mychar buffer, discarding any putback
        return pos_type(_State, _Off); // return new position
    }

    virtual _Mysb* __CLR_OR_THIS_CALL setbuf(_Elem* _Buffer, streamsize _Count) override { // offer _Buffer to C stream
        int _Mode;
        if (!_Buffer && _Count == 0) {
            _Mode = _IONBF;
        } else {
            _Mode = _IOFBF;
        }

        const size_t _Size = static_cast<size_t>(_Count) * sizeof(_Elem);

        if (!_Myfile || _CSTD setvbuf(_Myfile, reinterpret_cast<char*>(_Buffer), _Mode, _Size) != 0) {
            return nullptr; // failed
        }

        // new buffer, reinitialize pointers
        _Init(_Myfile, _Openfl);
        return this;
    }

    virtual int __CLR_OR_THIS_CALL sync() override { // synchronize C stream with external file
        if (!_Myfile || _Traits::eq_int_type(_Traits::eof(), overflow()) || 0 <= _CSTD fflush(_Myfile)) {
            return 0;
        }

        return -1;
    }

    virtual void __CLR_OR_THIS_CALL imbue(const locale& _Loc) override {
        // set locale to argument (capture nontrivial codecvt facet)
        _Initcvt(_STD use_facet<_Cvt>(_Loc));
    }

    void _Init(FILE* _File, _Initfl _Which) { // initialize to C stream _File after {new, open, close}
        using _State_type = typename _Traits::state_type;

        __PURE_APPDOMAIN_GLOBAL static _State_type _Stinit; // initial state

        _Closef    = _Which == _Openfl;
        _Wrotesome = false;

        _Mysb::_Init(); // initialize stream buffer base object

        if (_File && sizeof(_Elem) == 1) { // point inside C stream with [first, first + count) buffer
            _Elem** _Pb = nullptr;
            _Elem** _Pn = nullptr;
            int* _Nr    = nullptr;

            ::_get_stream_buffer_pointers(
                _File, reinterpret_cast<char***>(&_Pb), reinterpret_cast<char***>(&_Pn), &_Nr);
            int* _Nw = _Nr;

            _Mysb::_Init(_Pb, _Pn, _Nr, _Pb, _Pn, _Nw);
        }

        _Myfile = _File;
        _State  = _Stinit;
        _Pcvt   = nullptr; // pointer to codecvt facet
    }

    bool _Endwrite() { // put shift to initial conversion state, as needed
        if (!_Pcvt || !_Wrotesome) {
            return true;
        }

        // may have to put
        if (_Traits::eq_int_type(_Traits::eof(), overflow())) {
            return false;
        }

        constexpr size_t _Codecvt_temp_buf = 32;
        char _Str[_Codecvt_temp_buf];
        char* _Dest;
        switch (_Pcvt->unshift(_State, _Str, _Str + _Codecvt_temp_buf, _Dest)) { // test result of homing conversion
        case codecvt_base::ok:
            _Wrotesome = false; // homed successfully

        case codecvt_base::partial: // fall through
        { // put any generated bytes
            const auto _Count = static_cast<size_t>(_Dest - _Str);
            if (0 < _Count && _Count != static_cast<size_t>(_CSTD fwrite(_Str, 1, _Count, _Myfile))) {
                return false; // write failed
            }

            return !_Wrotesome;
        }

        case codecvt_base::noconv:
            _Wrotesome = false; // homed successfully
            return true; // nothing else to do

        default:
            return false; // conversion failed
        }
    }

    void _Initcvt(const _Cvt& _Newcvt) { // initialize codecvt pointer
        if (_Newcvt.always_noconv()) {
            _Pcvt = nullptr; // nothing to do
        } else { // set up for nontrivial codecvt facet
            _Pcvt = _STD addressof(_Newcvt);
            _Mysb::_Init(); // reset any buffering
        }
    }

private:
    const _Cvt* _Pcvt; // pointer to codecvt facet (may be null)
    _Elem _Mychar; // putback character, when _Ungetc fails
    bool _Wrotesome; // true if homing sequence may be needed
    typename _Traits::state_type _State; // current conversion state
    bool _Closef; // true if C stream must be closed
    FILE* _Myfile; // pointer to C stream

    void _Reset_back() { // restore buffer after putback
        if (_Mysb::eback() == &_Mychar) {
            _Mysb::setg(_Set_eback, _Set_eback, _Set_egptr);
        }
    }

    void _Set_back() { // set up putback area
        if (_Mysb::eback() != &_Mychar) { // save current get buffer
            _Set_eback = _Mysb::eback();
            _Set_egptr = _Mysb::egptr();
        }
        _Mysb::setg(&_Mychar, &_Mychar, &_Mychar + 1);
    }

    _Elem* _Set_eback; // saves eback() during one-element putback
    _Elem* _Set_egptr; // saves egptr()
};

template <class _Elem, class _Traits>
void swap(basic_filebuf<_Elem, _Traits>& _Left, basic_filebuf<_Elem, _Traits>& _Right) {
    _Left.swap(_Right);
}

// CLASS TEMPLATE basic_ifstream
template <class _Elem, class _Traits>
class basic_ifstream : public basic_istream<_Elem, _Traits> { // input stream associated with a C stream
public:
    using _Mybase = basic_istream<_Elem, _Traits>;
    using _Myfb   = basic_filebuf<_Elem, _Traits>;
    using _Myios  = basic_ios<_Elem, _Traits>;

    basic_ifstream() : _Mybase(_STD addressof(_Filebuffer)) {}

    explicit basic_ifstream(
        const char* _Filename, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot)
        : _Mybase(_STD addressof(_Filebuffer)) {
        // _Prot is an extension
        if (!_Filebuffer.open(_Filename, _Mode | ios_base::in, _Prot)) {
            _Myios::setstate(ios_base::failbit);
        }
    }

    explicit basic_ifstream(
        const string& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot)
        : basic_ifstream(_Str.c_str(), _Mode, _Prot) {} // _Prot is an extension

    explicit basic_ifstream(
        const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot)
        : _Mybase(_STD addressof(_Filebuffer)) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (!_Filebuffer.open(_Filename, _Mode | ios_base::in, _Prot)) {
            _Myios::setstate(ios_base::failbit);
        }
    }

    explicit basic_ifstream(
        const wstring& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot)
        : basic_ifstream(_Str.c_str(), _Mode, _Prot) {} // extension

#if _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM
    template <class _Path_ish = experimental::filesystem::path>
    explicit basic_ifstream(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::in,
        int _Prot = ios_base::_Default_open_prot)
        : basic_ifstream(_Path.c_str(), _Mode, _Prot) {} // _Prot is an extension
#endif // _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM

#if _HAS_CXX17
    template <int = 0, class _Path_ish = filesystem::path>
    explicit basic_ifstream(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::in,
        int _Prot = ios_base::_Default_open_prot)
        : basic_ifstream(_Path.c_str(), _Mode, _Prot) {} // _Prot is an extension
#endif // _HAS_CXX17

#ifdef _NATIVE_WCHAR_T_DEFINED
    explicit basic_ifstream(const unsigned short* _Filename, ios_base::openmode _Mode = ios_base::in,
        int _Prot = ios_base::_Default_open_prot)
        : _Mybase(_STD addressof(_Filebuffer)) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode | ios_base::in, _Prot) == 0) {
            _Myios::setstate(ios_base::failbit);
        }
    }
#endif // _NATIVE_WCHAR_T_DEFINED

    explicit basic_ifstream(FILE* _File) : _Mybase(_STD addressof(_Filebuffer)), _Filebuffer(_File) {} // extension

    basic_ifstream(basic_ifstream&& _Right) : _Mybase(_STD addressof(_Filebuffer)) {
        _Assign_rv(_STD move(_Right));
    }

    basic_ifstream& operator=(basic_ifstream&& _Right) {
        _Assign_rv(_STD move(_Right));
        return *this;
    }

    void _Assign_rv(basic_ifstream&& _Right) {
        if (this != _STD addressof(_Right)) {
            _Filebuffer.close();
            this->swap(_Right);
        }
    }

    void swap(basic_ifstream& _Right) {
        if (this != _STD addressof(_Right)) {
            _Mybase::swap(_Right);
            _Filebuffer.swap(_Right._Filebuffer);
        }
    }

    basic_ifstream(const basic_ifstream&) = delete;
    basic_ifstream& operator=(const basic_ifstream&) = delete;

    void open(
        const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode | ios_base::in, _Prot)) {
            _Myios::clear();
        } else {
            _Myios::setstate(ios_base::failbit);
        }
    }

    void open(const wstring& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot) {
        // extension
        open(_Str.c_str(), _Mode, _Prot);
    }

#if _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM
    template <class _Path_ish = experimental::filesystem::path>
    void open(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::in,
        int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        open(_Path.c_str(), _Mode, _Prot);
    }
#endif // _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM

#if _HAS_CXX17
    template <int = 0, class _Path_ish = filesystem::path>
    void open(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::in,
        int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        open(_Path.c_str(), _Mode, _Prot);
    }
#endif // _HAS_CXX17

#if _HAS_OLD_IOSTREAMS_MEMBERS
    void open(const wchar_t* _Filename, ios_base::open_mode _Mode) {
        // in standard as const std::filesystem::path::value_type *
        open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS

#ifdef _NATIVE_WCHAR_T_DEFINED
    void open(const unsigned short* _Filename, ios_base::openmode _Mode = ios_base::in,
        int _Prot = ios_base::_Default_open_prot) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode | ios_base::in, _Prot) == 0) {
            _Myios::setstate(ios_base::failbit);
        } else {
            _Myios::clear();
        }
    }

#if _HAS_OLD_IOSTREAMS_MEMBERS
    void open(const unsigned short* _Filename, ios_base::open_mode _Mode) {
        // in standard as const std::filesystem::path::value_type *
        open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS
#endif // _NATIVE_WCHAR_T_DEFINED

    virtual __CLR_OR_THIS_CALL ~basic_ifstream() noexcept {}

    _NODISCARD _Myfb* rdbuf() const {
        return const_cast<_Myfb*>(_STD addressof(_Filebuffer));
    }

    _NODISCARD bool is_open() const {
        return _Filebuffer.is_open();
    }

    void open(
        const char* _Filename, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode | ios_base::in, _Prot)) {
            _Myios::clear();
        } else {
            _Myios::setstate(ios_base::failbit);
        }
    }

    void open(const string& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        open(_Str.c_str(), _Mode, _Prot);
    }

#if _HAS_OLD_IOSTREAMS_MEMBERS
    void open(const char* _Filename, ios_base::open_mode _Mode) {
        open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS

    void close() {
        if (!_Filebuffer.close()) {
            _Myios::setstate(ios_base::failbit);
        }
    }

private:
    _Myfb _Filebuffer;
};

template <class _Elem, class _Traits>
void swap(basic_ifstream<_Elem, _Traits>& _Left, basic_ifstream<_Elem, _Traits>& _Right) {
    _Left.swap(_Right);
}

// CLASS TEMPLATE basic_ofstream
template <class _Elem, class _Traits>
class basic_ofstream : public basic_ostream<_Elem, _Traits> { // output stream associated with a C stream
public:
    using _Mybase = basic_ostream<_Elem, _Traits>;
    using _Myfb   = basic_filebuf<_Elem, _Traits>;
    using _Myios  = basic_ios<_Elem, _Traits>;

    basic_ofstream() : _Mybase(_STD addressof(_Filebuffer)) {}

    explicit basic_ofstream(const char* _Filename, ios_base::openmode _Mode = ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : _Mybase(_STD addressof(_Filebuffer)) { // _Prot is an extension
        if (!_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot)) {
            _Myios::setstate(ios_base::failbit);
        }
    }

    explicit basic_ofstream(
        const string& _Str, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot)
        : basic_ofstream(_Str.c_str(), _Mode, _Prot) {} // _Prot is an extension

    explicit basic_ofstream(
        const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot)
        : _Mybase(_STD addressof(_Filebuffer)) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (!_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot)) {
            _Myios::setstate(ios_base::failbit);
        }
    }

    explicit basic_ofstream(
        const wstring& _Str, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot)
        : basic_ofstream(_Str.c_str(), _Mode, _Prot) {} // extension

#if _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM
    template <class _Path_ish = experimental::filesystem::path>
    explicit basic_ofstream(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : basic_ofstream(_Path.c_str(), _Mode, _Prot) {} // _Prot is an extension
#endif // _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM

#if _HAS_CXX17
    template <int = 0, class _Path_ish = filesystem::path>
    explicit basic_ofstream(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : basic_ofstream(_Path.c_str(), _Mode, _Prot) {} // _Prot is an extension
#endif // _HAS_CXX17

#ifdef _NATIVE_WCHAR_T_DEFINED
    explicit basic_ofstream(const unsigned short* _Filename, ios_base::openmode _Mode = ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : _Mybase(_STD addressof(_Filebuffer)) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot) == 0) {
            _Myios::setstate(ios_base::failbit);
        }
    }
#endif // _NATIVE_WCHAR_T_DEFINED

    explicit basic_ofstream(FILE* _File) : _Mybase(_STD addressof(_Filebuffer)), _Filebuffer(_File) {} // extension

    basic_ofstream(basic_ofstream&& _Right) : _Mybase(_STD addressof(_Filebuffer)) {
        _Assign_rv(_STD move(_Right));
    }

    basic_ofstream& operator=(basic_ofstream&& _Right) {
        _Assign_rv(_STD move(_Right));
        return *this;
    }

    void _Assign_rv(basic_ofstream&& _Right) {
        if (this != _STD addressof(_Right)) {
            _Filebuffer.close();
            this->swap(_Right);
        }
    }

    void swap(basic_ofstream& _Right) {
        if (this != _STD addressof(_Right)) {
            _Mybase::swap(_Right);
            _Filebuffer.swap(_Right._Filebuffer);
        }
    }

    basic_ofstream(const basic_ofstream&) = delete;
    basic_ofstream& operator=(const basic_ofstream&) = delete;

    void open(
        const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot)) {
            _Myios::clear();
        } else {
            _Myios::setstate(ios_base::failbit);
        }
    }

    void open(const wstring& _Str, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot) {
        // extension
        open(_Str.c_str(), _Mode, _Prot);
    }

#if _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM
    template <class _Path_ish = experimental::filesystem::path>
    void open(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::out,
        int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        open(_Path.c_str(), _Mode, _Prot);
    }
#endif // _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM

#if _HAS_CXX17
    template <int = 0, class _Path_ish = filesystem::path>
    void open(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::out,
        int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        open(_Path.c_str(), _Mode, _Prot);
    }
#endif // _HAS_CXX17

#if _HAS_OLD_IOSTREAMS_MEMBERS
    void open(const wchar_t* _Filename, ios_base::open_mode _Mode) {
        // in standard as const std::filesystem::path::value_type *
        open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS

#ifdef _NATIVE_WCHAR_T_DEFINED
    void open(const unsigned short* _Filename, ios_base::openmode _Mode = ios_base::out,
        int _Prot = ios_base::_Default_open_prot) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot) == 0) {
            _Myios::setstate(ios_base::failbit);
        } else {
            _Myios::clear();
        }
    }

#if _HAS_OLD_IOSTREAMS_MEMBERS
    void open(const unsigned short* _Filename, ios_base::open_mode _Mode) {
        // in standard as const std::filesystem::path::value_type *
        open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS
#endif // _NATIVE_WCHAR_T_DEFINED

    virtual __CLR_OR_THIS_CALL ~basic_ofstream() noexcept {}

    _NODISCARD _Myfb* rdbuf() const {
        return const_cast<_Myfb*>(_STD addressof(_Filebuffer));
    }

    _NODISCARD bool is_open() const {
        return _Filebuffer.is_open();
    }

    void open(
        const char* _Filename, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot)) {
            _Myios::clear();
        } else {
            _Myios::setstate(ios_base::failbit);
        }
    }

    void open(const string& _Str, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        open(_Str.c_str(), _Mode, _Prot);
    }

#if _HAS_OLD_IOSTREAMS_MEMBERS
    void open(const char* _Filename, ios_base::open_mode _Mode) {
        open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS

    void close() {
        if (!_Filebuffer.close()) {
            _Myios::setstate(ios_base::failbit);
        }
    }

private:
    _Myfb _Filebuffer;
};

template <class _Elem, class _Traits>
void swap(basic_ofstream<_Elem, _Traits>& _Left, basic_ofstream<_Elem, _Traits>& _Right) {
    _Left.swap(_Right);
}

// CLASS TEMPLATE basic_fstream
template <class _Elem, class _Traits>
class basic_fstream : public basic_iostream<_Elem, _Traits> { // input/output stream associated with a C stream
public:
    using _Mybase     = basic_iostream<_Elem, _Traits>;
    using _Myfb       = basic_filebuf<_Elem, _Traits>;
    using _Myios      = basic_ios<_Elem, _Traits>;
    using char_type   = _Elem;
    using traits_type = _Traits;
    using int_type    = typename _Traits::int_type;
    using pos_type    = typename _Traits::pos_type;
    using off_type    = typename _Traits::off_type;

    basic_fstream() : _Mybase(_STD addressof(_Filebuffer)) {}

    explicit basic_fstream(const char* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : _Mybase(_STD addressof(_Filebuffer)) { // _Prot is an extension
        if (!_Filebuffer.open(_Filename, _Mode, _Prot)) {
            _Myios::setstate(ios_base::failbit);
        }
    }

    explicit basic_fstream(const string& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : basic_fstream(_Str.c_str(), _Mode, _Prot) {} // _Prot is an extension

    explicit basic_fstream(const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : _Mybase(_STD addressof(_Filebuffer)) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (!_Filebuffer.open(_Filename, _Mode, _Prot)) {
            _Myios::setstate(ios_base::failbit);
        }
    }

    explicit basic_fstream(const wstring& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : basic_fstream(_Str.c_str(), _Mode, _Prot) {} // extension

#if _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM
    template <class _Path_ish = experimental::filesystem::path>
    explicit basic_fstream(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : basic_fstream(_Path.c_str(), _Mode, _Prot) {} // _Prot is an extension
#endif // _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM

#if _HAS_CXX17
    template <int = 0, class _Path_ish = filesystem::path>
    explicit basic_fstream(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : basic_fstream(_Path.c_str(), _Mode, _Prot) {} // _Prot is an extension
#endif // _HAS_CXX17

#ifdef _NATIVE_WCHAR_T_DEFINED
    explicit basic_fstream(const unsigned short* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot)
        : _Mybase(_STD addressof(_Filebuffer)) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode, _Prot) == 0) {
            _Myios::setstate(ios_base::failbit);
        }
    }
#endif // _NATIVE_WCHAR_T_DEFINED

    explicit basic_fstream(FILE* _File) : _Mybase(_STD addressof(_Filebuffer)), _Filebuffer(_File) {} // extension

    basic_fstream(basic_fstream&& _Right) : _Mybase(_STD addressof(_Filebuffer)) {
        _Assign_rv(_STD move(_Right));
    }

    basic_fstream& operator=(basic_fstream&& _Right) {
        _Assign_rv(_STD move(_Right));
        return *this;
    }

    void _Assign_rv(basic_fstream&& _Right) {
        if (this != _STD addressof(_Right)) {
            _Filebuffer.close();
            this->swap(_Right);
        }
    }

    void swap(basic_fstream& _Right) {
        if (this != _STD addressof(_Right)) {
            _Mybase::swap(_Right);
            _Filebuffer.swap(_Right._Filebuffer);
        }
    }

    basic_fstream(const basic_fstream&) = delete;
    basic_fstream& operator=(const basic_fstream&) = delete;

    void open(const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode, _Prot)) {
            _Myios::clear();
        } else {
            _Myios::setstate(ios_base::failbit);
        }
    }

    void open(const wstring& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot) {
        // extension
        open(_Str.c_str(), _Mode, _Prot);
    }

#if _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM
    template <class _Path_ish = experimental::filesystem::path>
    void open(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot) {
        // extension
        open(_Path.c_str(), _Mode, _Prot);
    }
#endif // _FSTREAM_SUPPORTS_EXPERIMENTAL_FILESYSTEM

#if _HAS_CXX17
    template <int = 0, class _Path_ish = filesystem::path>
    void open(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        open(_Path.c_str(), _Mode, _Prot);
    }
#endif // _HAS_CXX17

#if _HAS_OLD_IOSTREAMS_MEMBERS
    void open(const wchar_t* _Filename, ios_base::open_mode _Mode) {
        // in standard as const std::filesystem::path::value_type *
        open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS

#ifdef _NATIVE_WCHAR_T_DEFINED
    void open(const unsigned short* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot) {
        // in standard as const std::filesystem::path::value_type *; _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode, _Prot) == 0) {
            _Myios::setstate(ios_base::failbit);
        } else {
            _Myios::clear();
        }
    }

#if _HAS_OLD_IOSTREAMS_MEMBERS
    void open(const unsigned short* _Filename, ios_base::open_mode _Mode) {
        // in standard as const std::filesystem::path::value_type *
        open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS
#endif // _NATIVE_WCHAR_T_DEFINED

    virtual __CLR_OR_THIS_CALL ~basic_fstream() noexcept {}

    _NODISCARD _Myfb* rdbuf() const {
        return const_cast<_Myfb*>(_STD addressof(_Filebuffer));
    }

    _NODISCARD bool is_open() const {
        return _Filebuffer.is_open();
    }

    void open(const char* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        if (_Filebuffer.open(_Filename, _Mode, _Prot)) {
            _Myios::clear();
        } else {
            _Myios::setstate(ios_base::failbit);
        }
    }

    void open(const string& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out,
        int _Prot = ios_base::_Default_open_prot) {
        // _Prot is an extension
        open(_Str.c_str(), _Mode, _Prot);
    }

#if _HAS_OLD_IOSTREAMS_MEMBERS
    void open(const char* _Filename, ios_base::open_mode _Mode) {
        open(_Filename, static_cast<ios_base::openmode>(_Mode));
    }
#endif // _HAS_OLD_IOSTREAMS_MEMBERS

    void close() {
        if (!_Filebuffer.close()) {
            _Myios::setstate(ios_base::failbit);
        }
    }

private:
    _Myfb _Filebuffer;
};

template <class _Elem, class _Traits>
void swap(basic_fstream<_Elem, _Traits>& _Left, basic_fstream<_Elem, _Traits>& _Right) {
    _Left.swap(_Right);
}
_STD_END

#pragma pop_macro("new")
_STL_RESTORE_CLANG_WARNINGS
#pragma warning(pop)
#pragma pack(pop)
#endif // _STL_COMPILER_PREPROCESSOR
#endif // _FSTREAM_

總結(jié)

以上是生活随笔為你收集整理的c++标准库fstream文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产精品综合久久久久 | www黄com| 91成人免费看 | 少妇自拍av | 久久精品小视频 | 亚洲精品tv久久久久久久久久 | 美女久久一区 | 国产精品精品国产色婷婷 | 国产二区免费视频 | 91网址在线看 | 天天在线视频色 | 免费观看成人av | www.香蕉| 天天在线操 | 亚洲四虎影院 | 久久爱www. | 国产伦理一区二区三区 | 一区二区三区免费在线观看视频 | 8x成人在线 | 狠狠的操狠狠的干 | 欧美一区二区在线免费看 | 九九热在线免费观看 | 丁香婷婷在线观看 | 成人午夜电影在线播放 | 亚洲 欧美变态 另类 综合 | 色网站在线免费观看 | 蜜桃传媒一区二区 | 久久视频在线观看免费 | 国产啊v在线 | 久久久成人精品 | 国产美女主播精品一区二区三区 | 国产成人精品午夜在线播放 | 国产91欧美 | 园产精品久久久久久久7电影 | 天天天天天天操 | 五月花激情| 激情欧美在线观看 | 亚洲激情在线观看 | 三级黄色大片在线观看 | 91中文在线观看 | 91成年人网站 | 国产日韩欧美自拍 | 日韩在线观看视频一区二区三区 | a'aaa级片在线观看 | 色综合狠狠干 | 色网站在线免费观看 | 制服丝袜在线 | 四月婷婷在线观看 | 亚洲国产精品人久久电影 | 亚洲视频电影在线 | 成人av午夜| 国产网站av | 亚洲精品高清在线观看 | 日本中文字幕在线播放 | 91精品国产一区二区在线观看 | 在线看一级片 | 波多野结衣网址 | 欧美激情视频在线免费观看 | 超碰在线98 | 久久综合给合久久狠狠色 | 精品国产中文字幕 | 国产高清在线视频 | 日本中文字幕视频 | 成人一区影院 | 久久综合九色99 | 久久亚洲综合国产精品99麻豆的功能介绍 | 久草在线免费在线观看 | 日韩手机在线观看 | 182午夜在线观看 | 中文字幕在线色 | 色视频成人在线观看免 | 免费午夜av| 亚洲国产中文字幕在线观看 | 精品一区二区三区久久 | 精品欧美一区二区精品久久 | 天天爱天天操 | 国产一区二区在线视频观看 | 亚洲天堂免费视频 | 91中文在线观看 | 精品国产福利在线 | 日本99久久 | 国产伦精品一区二区三区在线 | 久草在线91 | 亚洲成人av电影 | 久操伊人 | 久久影视一区 | 毛片精品免费在线观看 | 成人精品福利 | 精品不卡视频 | av在线播放国产 | 日韩欧美高清在线 | 亚洲va欧美va人人爽 | 日本精品久久久一区二区三区 | 婷婷狠狠操 | 免费a级黄色毛片 | 亚洲国产视频在线 | 色婷婷综合久色 | 国产黄色免费看 | 日韩在线| 91九色视频在线观看 | 久久好看免费视频 | 人人干狠狠操 | 精品人妖videos欧美人妖 | 久久免费黄色网址 | 亚洲首页| 日日日日 | 国产成人专区 | 欧美性天天 | 一区二区三区高清在线观看 | 欧美日韩一区二区免费在线观看 | 免费美女久久99 | 97视频免费在线 | 一区三区在线欧 | 亚洲少妇激情 | 在线视频手机国产 | 欧美男同网站 | 亚洲六月丁香色婷婷综合久久 | www.狠狠操.com | 久久久五月天 | 欧美一区二区免费在线观看 | 久久久免费网站 | 国产精品自在线拍国产 | 在线观看精品黄av片免费 | 成人午夜剧场在线观看 | 69精品人人人人 | 精品久久久免费 | 国产码电影 | 成人h视频在线播放 | 婷婷久月 | 欧美人体xx | 2024av在线播放 | 日韩三级视频 | 亚洲色图av | 美女久久久久久久久久久 | 午夜电影中文字幕 | 国产人免费人成免费视频 | 国产精品一区一区三区 | 国产一区免费观看 | 丁香视频全集免费观看 | a电影免费看 | 日韩一区二区三区视频在线 | 欧美久久久| 91高清免费在线观看 | 日韩中字在线 | 国产高清在线a视频大全 | 婷婷av网 | 国产不卡免费av | www好男人| 91最新网址在线观看 | 久久97久久97精品免视看 | 日韩理论片在线观看 | 国产精品自产拍在线观看桃花 | 亚州av免费 | 特黄特色特刺激视频免费播放 | 99久免费精品视频在线观看 | 91人人澡人人爽人人精品 | 久久久久99精品国产片 | 涩涩成人在线 | 久久伊人爱| 91香蕉国产在线观看软件 | 亚洲国产一区二区精品专区 | 国产亚洲精品美女久久 | av女优中文字幕在线观看 | 国产欧美中文字幕 | www黄| 久久久受www免费人成 | 蜜桃麻豆www久久囤产精品 | 日韩在线观看网站 | 中文字幕在线观看免费高清完整版 | 亚洲精品国产成人av在线 | 黄色毛片在线观看 | 欧美精品久久久久性色 | 国产精品 中文字幕 亚洲 欧美 | av在线免费在线 | 五月婷婷在线视频观看 | 国产玖玖在线 | 欧美日韩91| 福利av在线 | 欧美日韩亚洲国产一区 | 精品成人a区在线观看 | 黄色一区三区 | 999久久久免费视频 午夜国产在线观看 | 激情喷水 | 午夜性色| 7777精品伊人久久久大香线蕉 | 婷婷丁香久久五月婷婷 | 91毛片在线| 免费在线观看一区 | 九九精品视频在线看 | 亚洲作爱视频 | 狠狠色狠狠综合久久 | 在线观看av中文字幕 | 91在线欧美 | 毛片.com| 深爱五月网 | 98涩涩国产露脸精品国产网 | 人人射人人| 国产精品久久久99 | 亚洲区另类春色综合小说 | 天天视频亚洲 | 日韩簧片在线观看 | 国产免费视频在线 | 黄色资源在线观看 | 六月激情 | 成人啪啪18免费游戏链接 | 中文久久精品 | 国产精品久久久久毛片大屁完整版 | 国产91在线看 | 亚洲精品免费观看 | 成人9ⅰ免费影视网站 | 亚洲色图色 | 中字幕视频在线永久在线观看免费 | 久久综合九色综合欧美就去吻 | 成年人电影毛片 | 欧美不卡视频在线 | www.久热 | 女人18精品一区二区三区 | 一区二区三区播放 | 中文字幕在线观看一区 | 欧美日韩国产xxx | 亚州国产视频 | 久久综合精品一区 | 在线国产福利 | 99精品一区二区三区 | 综合色中文 | 欧美激情精品久久久久久免费 | 人人狠狠综合久久亚洲 | 国产69熟 | 日本h在线播放 | 亚洲精品午夜久久久久久久久久久 | 蜜桃麻豆www久久囤产精品 | 成人免费网站在线观看 | 999久久久免费视频 午夜国产在线观看 | 18性欧美xxxⅹ性满足 | 亚洲成a人片77777kkkk1在线观看 | 亚洲最新视频在线 | 亚洲成av人影院 | 国产片网站 | 日韩欧美成 | 亚洲免费av电影 | 久久久久久久久久久久国产精品 | 国产一性一爱一乱一交 | 在线观看视频国产 | 成人精品999 | 国产一级小视频 | 国产午夜三级一区二区三桃花影视 | 视频 国产区 | www.大网伊人 | 精品视频123区在线观看 | 久久无码av一区二区三区电影网 | 又黄又色又爽 | 久久久久久久久毛片精品 | 一区二区三区在线视频观看58 | 色综合久久精品 | 天天舔天天射天天操 | 91桃色在线播放 | 黄色av一级 | 免费在线播放 | 色综合久久88色综合天天 | 亚洲激情综合网 | 欧美十八 | 国产精品精品 | 国产亚洲日 | 精品国产理论 | 国产不卡视频在线 | 久久免费毛片视频 | 国产美女网站在线观看 | 免费精品在线视频 | 青青射| www99久久| 在线观看国产一区二区 | 久久爱资源网 | 伊人热 | 手机在线看a| 精品视频免费观看 | 免费视频 你懂的 | 国产日韩三级 | 欧美极品xxx | 久久99久久99精品免观看粉嫩 | 人人干狠狠干 | 91福利在线观看 | 一区二区三区三区在线 | 在线v片免费观看视频 | 91精品国产高清自在线观看 | 国产美女久久 | 日韩美女免费线视频 | 久久成人综合视频 | 99精品欧美一区二区 | 激情五月在线 | 99综合久久 | www黄色 | 欧美成a人片在线观看久 | 免费网站v | 婷婷在线资源 | 麻豆传媒一区二区 | 欧美99热| 日日爽天天爽 | 亚洲综合精品在线 | 色多视频在线观看 | 国产91aaa | 国产午夜精品福利视频 | 成人99免费视频 | 久草电影免费在线观看 | 久久综合九色综合欧美就去吻 | 日韩精品中文字幕在线观看 | 国产婷婷 | 日本久久久久久久久久 | 国产中文视频 | 欧美一区二区三区四区夜夜大片 | 精品人人人人 | 99精品视频在线看 | 亚洲欧美日韩国产 | www中文在线 | www.xxx.性狂虐 | 亚洲激情在线播放 | 视频在线国产 | 成片免费观看视频 | 国产色 在线 | 91色视频| 91污在线 | 亚洲视频每日更新 | 精品国产99| 成人av免费看 | 国产麻豆精品在线观看 | 99在线免费视频观看 | 亚洲免费国产视频 | 911av视频| 国产精品日韩 | 香蕉97视频观看在线观看 | 日韩视频一区二区三区在线播放免费观看 | 午夜av一区二区三区 | 在线欧美a | 亚洲综合在线播放 | 丁香六月欧美 | 色婷婷视频在线 | 欧美色久 | 91精品一区二区三区久久久久久 | 欧美在线观看视频免费 | 免费看三级黄色片 | 国产精品免费久久久久久久久久中文 | 97在线观视频免费观看 | 天天草夜夜 | 国产亚洲精品久久久久久久久久久久 | 国产人在线成免费视频 | 黄色亚洲 | 狠狠色噜噜狠狠狠狠2021天天 | 天天看天天干 | 国产成人亚洲在线观看 | 久久综合狠狠综合 | 日韩在线网址 | 国产精品无av码在线观看 | 激情五月激情综合网 | 久久美女高清视频 | 黄色1级毛片 | 精品久久久久久国产 | 午夜男人影院 | 亚洲国产精品资源 | 国产伦精品一区二区三区高清 | 在线99热 | 欧美一区二区三区在线视频观看 | 成人在线观看免费视频 | 国产精品成人一区二区三区吃奶 | 色在线网| 在线播放国产一区二区三区 | www.福利 | 中文字幕xxxx | 高清不卡免费视频 | 国产精品久久电影网 | 91经典在线 | 午夜神马福利 | 五月天激情视频在线观看 | 日本在线中文在线 | 天天操天天干天天干 | 久久精品日本啪啪涩涩 | 国内精品在线观看视频 | 成人欧美一区二区三区在线观看 | 中文字幕资源在线 | 中文字幕av在线播放 | 日本一区二区三区免费看 | 国产无区一区二区三麻豆 | 国产一区欧美日韩 | 女人高潮特级毛片 | 免费成人在线视频网站 | 国产一区二区久久精品 | 天天操天天射天天舔 | 亚洲人在线视频 | 韩国av一区 | 国产精品大片在线观看 | 免费视频xnxx com | 狠狠色丁香久久婷婷综合丁香 | 黄色网在线播放 | 欧美五月婷婷 | 一区二区三区四区免费视频 | 日韩两性视频 | 最新国产精品拍自在线播放 | 国内精品视频在线 | 91人人插| 欧美天天干 | 一区二区免费不卡在线 | 97香蕉视频 | 91桃色在线播放 | 亚洲精品www. | 久久国内免费视频 | 国产成人一区二区三区电影 | 91在线视频免费91 | 热久久免费视频精品 | 在线观看成年人 | 国产一二区视频 | 精品国产伦一区二区三区观看方式 | 色婷婷视频在线观看 | 国产片免费在线观看视频 | 欧美日韩国产xxx | 亚洲激情综合 | av免费观看网址 | 国产成人333kkk| av线上看 | 五月婷婷香蕉 | 91精品导航| 亚洲成人av在线播放 | 蜜桃视频在线视频 | 精品久久久久久久久亚洲 | 91麻豆精品国产午夜天堂 | 久久精品久久99精品久久 | 亚洲国产中文字幕 | 免费视频成人 | 国产精品乱码久久久 | 国产在线999 | 伊人伊成久久人综合网站 | 人人爽爽人人 | 色综合久久天天 | 午夜狠狠干 | 超碰免费成人 | 成人91在线| av解说在线 | 97夜夜澡人人爽人人免费 | 四虎www | 免费看国产黄色 | 久久人人爽人人 | 99re8这里有精品热视频免费 | 久久免费99| 免费的国产精品 | 精品国产免费看 | 天天色天 | 日韩高清av在线 | 欧美少妇xxxxxx | 国产精品综合av一区二区国产馆 | 精品久久久免费 | 中文字幕中文 | 狠狠躁天天躁综合网 | 成人动漫一区二区三区 | 亚洲成av | 美女天天操| 天天操操操操操操 | 国产亚洲综合精品 | 激情五月婷婷激情 | 免费久久久久久 | 欧美日韩午夜爽爽 | 日韩久久午夜一级啪啪 | 欧美污网站 | 国产99精品 | 超碰在线观看av.com | 人人添人人 | 91在线视频观看免费 | 久久影院午夜论 | 久久精彩免费视频 | 蜜桃传媒一区二区 | 狠狠操狠狠干天天操 | 在线免费观看国产精品 | 日韩av黄 | 国内精品中文字幕 | 午夜精品视频福利 | 99视频国产精品免费观看 | av3级在线 | 国精产品999国精产品岳 | 亚洲午夜精品电影 | 国产99一区视频免费 | 九九热国产 | 超碰97网站 | 亚洲电影免费 | 天天在线视频色 | av成人在线观看 | 国产精品久久嫩一区二区免费 | 免费色网站| 欧美福利久久 | 日韩偷拍精品 | 国产人成免费视频 | 成人在线免费观看网站 | 色偷偷人人澡久久超碰69 | 美女黄久久 | 粉嫩一区二区三区粉嫩91 | 中文字幕国产精品 | 久久精品一二三区 | 国产精品免费在线 | 99视频免费看 | 成人sm另类专区 | 成人黄色大片在线观看 | 玖玖视频网 | 天天天色 | 日韩av一区二区在线 | 丁香婷婷激情网 | 黄色小视频在线观看免费 | 成片视频免费观看 | 欧洲精品视频一区 | av免费看av | 韩国av电影在线观看 | 欧美亚洲免费在线一区 | 99操视频| 国产一区二区三区高清播放 | 特黄色大片 | 免费a网| 久久亚洲电影 | 国产精品刺激对白麻豆99 | 天天爽夜夜爽人人爽曰av | 色香蕉在线 | 九色精品免费永久在线 | 免费在线观看av的网站 | 国产 日韩 在线 亚洲 字幕 中文 | av在线播放亚洲 | av福利超碰网站 | 天天干天天综合 | 久久国产精品99久久久久 | 国产成人精品久久久久 | 久久综合久久综合这里只有精品 | 日韩三级免费观看 | 亚洲国产日韩欧美在线 | 91最新国产 | 国产视频资源在线观看 | 欧美色888 | 91精品视频在线免费观看 | 波多野结衣电影一区二区 | 国产精品免费一区二区三区在线观看 | 中文字幕资源网 国产 | 国产一区二区精品91 | 女人18片 | 一本到在线 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 日本女人的性生活视频 | 97电影手机 | 字幕网资源站中文字幕 | 日本二区三区在线 | 国产精品久久久久久超碰 | 97视频在线观看免费 | 婷婷伊人综合亚洲综合网 | 国产精品久久精品国产 | 精品亚洲网 | 9在线观看免费高清完整版在线观看明 | 伊人婷婷综合 | 黄免费在线观看 | av资源免费在线观看 | 日韩剧 | 99热精品在线 | 国产精品青青 | 久久久免费精品视频 | 国产一区二区在线播放 | 91高清在线看| 久久久久国产精品视频 | 国产 欧美 日本 | 婷婷网在线 | 丁香久久激情 | 成人9ⅰ免费影视网站 | 97超碰在线免费 | 中文字幕在线观看第二页 | 亚洲 欧美日韩 国产 中文 | 色妞久久福利网 | 午夜av在线电影 | 人人超碰人人 | 一区二区三区四区在线免费观看 | 日韩手机在线 | 中文网丁香综合网 | 亚洲综合在线观看视频 | 激情久久网 | 99久久99久久精品免费 | 欧洲精品视频一区 | 亚洲一本视频 | 狠狠躁18三区二区一区ai明星 | 中文字幕在线一区观看 | 欧美一区二视频在线免费观看 | 黄色软件在线观看免费 | 91视频在线播放视频 | 亚洲精品日韩在线观看 | 成人一区电影 | 日韩a在线观看 | a色视频| 久久精品精品电影网 | 91精品视频网站 | 色噜噜在线观看视频 | 免费av网址在线观看 | 天天综合久久综合 | 精品国产成人在线影院 | 日韩一区正在播放 | 国产黄色av影视 | 亚洲国产精品成人精品 | 久久怡红院 | 最近2019好看的中文字幕免费 | 激情开心网站 | 美女视频永久黄网站免费观看国产 | www.人人草| 91免费视频网站在线观看 | 欧美伦理一区二区 | 黄污在线看 | 国产精品久久久久四虎 | 日韩欧美视频在线 | 蜜臀av在线一区二区三区 | 久久成人视屏 | 五月天天天操 | 天天操天天干天天摸 | 六月色丁 | 亚洲色图色 | 欧美久久久影院 | jizzjizzjizz亚洲 | 成人久久毛片 | 激情婷婷综合 | 一区二区三区久久 | 日韩视频免费在线 | 91精品无人成人www | 亚洲日本韩国一区二区 | 亚洲欧美视频在线播放 | 激情片av| 国产精品久久久久久久免费大片 | 欧美一区成人 | 国产高清在线免费视频 | 免费进去里的视频 | 国产在线观看高清视频 | 精品9999 | 日韩在线影视 | 手机在线日韩视频 | 国产成人一区二区啪在线观看 | 国产精品一区二区吃奶在线观看 | 天天躁日日躁狠狠躁av麻豆 | 久久九九久久精品 | 丁香资源影视免费观看 | 亚洲视频网站在线观看 | 欧美性极品xxxx做受 | 日韩精品黄 | 日本精品久久久久中文字幕 | 久久国产精品一国产精品 | 国产美女精品视频免费观看 | 最新影院 | 欧美色888 | 91在线观 | 久草在线播放视频 | 深爱婷婷网 | 亚洲精品黄色 | 国产视频欧美视频 | 久久久精品 | 欧美日韩视频精品 | www.黄色片.com | 欧美日韩精品在线免费观看 | www欧美日韩 | 国产精品免费久久久久久 | 免费av在线网 | 国产玖玖视频 | 亚洲 欧美 综合 在线 精品 | 日韩精品高清不卡 | 精品福利视频在线 | 麻豆成人网 | 亚洲国产美女精品久久久久∴ | 日韩理论片中文字幕 | 天天躁日日躁狠狠躁av中文 | 国产精品午夜久久久久久99热 | 午夜骚影 | 日韩在线视频国产 | 日韩剧情| 成人一级免费视频 | 不卡电影免费在线播放一区 | 亚洲精品国产日韩 | 在线观看 国产 | 久草电影网| 亚洲天天干| 91成人精品在线 | 欧美日韩xxxxx | 成人综合婷婷国产精品久久免费 | 国产超碰97 | 丁香婷婷激情 | 玖玖视频网 | 成人一区二区在线 | 超碰com| 一区二区高清在线 | 日本中文字幕一二区观 | 男女啪啪网站 | 精品一区91 | av在线播放网址 | 欧美另类v| 日韩xxxbbb | 国产乱对白刺激视频在线观看女王 | www狠狠| 日日操操操 | 国内精品久久久久久久久 | 国产精品99久久久久久人免费 | 激情五月***国产精品 | 92国产精品久久久久首页 | 黄色片视频在线观看 | 丝袜+亚洲+另类+欧美+变态 | 不卡精品视频 | 免费视频a| 久久人人爽人人爽人人片 | 日日干天天爽 | 成 人 免费 黄 色 视频 | 久草精品在线观看 | 久久久蜜桃 | 久久免费试看 | 日韩毛片在线免费观看 | 国产片网站 | 能在线观看的日韩av | 久久99日韩 | 国产一级黄色电影 | 亚洲精品自拍视频在线观看 | 三级a视频 | 99精品欧美一区二区三区 | 国产视频一区二区在线观看 | 精品国产一区二区三区久久影院 | 精久久久久| 伊人天堂久久 | 国产色拍| 免费一级黄色 | 婷婷资源站 | 色天天 | 午夜性福利| 久久久毛片| 成人性生交大片免费看中文网站 | 国产91勾搭技师精品 | 91麻豆精品国产91久久久无需广告 | 在线看成人片 | 91精品国产三级a在线观看 | 久久精品2 | 久久视影 | 国产免费又爽又刺激在线观看 | 国产精品综合久久久久久 | 亚洲成人av电影 | 亚洲国产高清在线观看视频 | 中文资源在线观看 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 国产精品久久久久久久久久直播 | 国产成人精品一区二区三区在线观看 | 久久美女免费视频 | 成人av一区二区在线观看 | 十八岁免进欧美 | 91精品天码美女少妇 | 亚洲性少妇性猛交wwww乱大交 | 久久福利电影 | 日韩在线免费小视频 | 成人免费观看大片 | 日韩午夜剧场 | 黄色动态图xx | 成人午夜影院在线观看 | 午夜三级大片 | 国内99视频 | v片在线播放 | 成人精品电影 | 天天综合网久久综合网 | 亚洲乱码在线观看 | 亚洲人成免费网站 | 亚洲精品视频网站在线观看 | 亚洲精品黄色在线观看 | 91在线一区 | 欧美综合在线视频 | 国产精品欧美 | 精品国产电影一区二区 | 亚洲在线观看av | 精品国产一区二区三区在线观看 | 在线看国产日韩 | 亚洲综合色站 | 亚洲三级网 | 精壮的侍卫呻吟h | 日本少妇久久久 | 亚洲国产精品一区二区久久hs | 免费观看性生交大片3 | 丁香六月网 | 久操视频在线播放 | 成人免费视频在线观看 | 中文字幕av网站 | 在线不卡a | 国产无套视频 | 91精品国产综合久久福利不卡 | 九色自拍视频 | 国产精品国产自产拍高清av | av电影一区二区三区 | 久草a在线| 成人av在线直播 | 午夜黄色影院 | 国产第一页福利影院 | 中文字幕av专区 | 精品久久一级片 | 亚洲国产日韩一区 | 国产精品理论片在线观看 | www.夜夜操.com| 色妞色视频一区二区三区四区 | 免费成人黄色 | 九九热免费在线观看 | 日韩免费电影一区二区三区 | 免费黄色在线播放 | 国产97色| 91影视成人| 91亚洲精品久久久蜜桃 | 91人人人 | 国产高清不卡一区二区三区 | 中文字幕免费看 | 日韩和的一区二在线 | 免费男女羞羞的视频网站中文字幕 | 欧美美女一级片 | 一级片视频在线 | 夜夜看av | 成人性生交大片免费观看网站 | 97人人模人人爽人人喊网 | 天天插日日插 | 国产成人亚洲在线观看 | 国产精品18久久久久久首页狼 | 亚洲第一区精品 | 欧美一区在线看 | 在线观看精品 | 美女视频是黄的免费观看 | 黄色a级片在线观看 | 狠狠色噜噜狠狠 | 中文字幕永久在线 | 天堂va在线观看 | 在线一区二区三区 | 精品久久久久亚洲 | 99在线观看免费视频精品观看 | 又黄又爽又色无遮挡免费 | 久久伊人婷婷 | 在线观看精品视频 | 综合久久精品 | 国产精品久久久久久久久久三级 | 伊人婷婷激情 | 欧美日韩一区二区在线观看 | 成人久久久久久久久久 | 国产亚洲精品久久久久久久久久久久 | 99r在线视频| 日本久久久精品视频 | 一区二区三区动漫 | 91免费网址 | 久久综合狠狠综合久久狠狠色综合 | 伊人日日干| 午夜精品久久久久久久99 | 日韩字幕在线 | 欧美日韩国产伦理 | 午夜黄色一级片 | 久久亚洲福利视频 | 日韩电影在线观看中文字幕 | 毛片久久久 | 色夜影院 | 香蕉日日 | 97国产大学生情侣酒店的特点 | 天天射天天色天天干 | 色www免费视频 | 五月婷婷av在线 | 免费午夜视频在线观看 | 亚州中文av | 国产香蕉97碰碰久久人人 | 午夜精品福利一区二区 | 人人爽人人 | 国产精品区免费视频 | 波多野结衣精品在线 | 一二三区av| 色中色资源站 | av电影亚洲 | 欧美日韩一区三区 | 久久影院亚洲 | 91免费在线播放 | 91av免费在线观看 | 日日爱999 | 美女在线免费观看视频 | 国产一级片视频 | 日韩高清三区 | 91在线免费视频 | 97av在线 | 日韩欧美综合精品 | 欧美亚洲国产精品久久高清浪潮 | 九九视频网 | 日韩久久久久久 | 亚洲欧美日韩一区二区三区在线观看 | 久久96| 91黄色成人| 亚洲欧洲精品视频 | 国产精品久久久久久999 | 欧美日本一二三 | www国产亚洲精品久久网站 | 久久精品8| 亚州精品在线视频 | 在线中文字幕网站 | 天天操狠狠操夜夜操 | 成人国产电影在线观看 | 天干啦夜天干天干在线线 | 婷婷成人亚洲综合国产xv88 | 欧美精品中文 | 嫩草av影院| 男女日麻批 | 中文字幕在线一区二区三区 | 久久久久久久99精品免费观看 | 青春草视频在线播放 | 国产96av| 青青射 | 日p在线观看 | 亚洲视频网站在线观看 | 国产在线观看二区 | 麻豆视频在线 | 中文字幕观看av | 国产精品美女久久久久久 | av日韩在线网站 | 日日操日日 | 在线免费观看黄网站 | 91精品国产福利在线观看 | 久久午夜电影网 | 91精品国自产拍天天拍 | 天天天天天天天操 | av免费看av | 91尤物国产尤物福利在线播放 | 伊人天天干 | 激情视频一区 | 国产一级一片免费播放放 | 午夜99| 在线播放一区二区三区 | 天天天天综合 | 日日草天天干 | 欧美视频在线二区 | 在线亚洲日本 | 麻豆视频在线观看免费 | 欧美 日韩 国产 中文字幕 | 久久天堂影院 | 在线蜜桃视频 | 久久深爱网 | 国产精品原创 | 国产精品免费观看网站 | 国产玖玖精品视频 | 97偷拍在线视频 | 美女免费视频网站 | 色噜噜噜 | 男女免费av| 我爱av激情网| 久草在线资源网 | 久久免费中文视频 | 在线激情av电影 | 激情文学综合丁香 | 精品成人在线 | 天堂va在线观看 | 日韩成人精品 | 国产精品女同一区二区三区久久夜 | 免费看一级一片 | 丁香婷五月 | 亚洲成人精品久久 | 在线 日韩 av | 久久色视频 | 99产精品成人啪免费网站 | 狠狠干2018 | 国产高清 不卡 | 91一区二区三区久久久久国产乱 | 不卡的一区二区三区 | 国产精品亚洲人在线观看 | 久久这里| 97超碰在线久草超碰在线观看 | 丁香 婷婷 激情 | 国产男女无遮挡猛进猛出在线观看 | 免费高清在线观看成人 | 欧美成人在线免费观看 | 久久精品中文视频 | 91精品久久久久久粉嫩 | 一级黄色视屏 | 国产不卡网站 | 成人午夜电影在线播放 | 免费精品久久久 | 在线国产片 | 午夜少妇av | 欧美日韩三级在线观看 | 91网站在线视频 | 国产综合片 | 国产精品成人aaaaa网站 | 美女久久 | 黄色小网站免费看 | 国产亚洲精品女人久久久久久 | 五月婷综合网 | 天天色影院| 国产亚洲激情视频在线 | 国产一区二区播放 | 久久伊人操| 又黄又爽又色无遮挡免费 | 精品久久片 | 日韩精品一区二区三区中文字幕 | 免费日韩一区二区三区 | 国产日韩视频在线观看 | 亚洲蜜桃在线 | 免费看一级黄色大全 | 国产一区视频在线观看免费 | 久草视频资源 | 狠狠网站 | 一区 在线 影院 | 日韩精品第1页 | 久久精品99国产精品 | 中文乱幕日产无线码1区 | 久久精品二区 | 黄色在线观看免费网站 | 国产亚洲精品无 | 不卡的av片 | 国产精品久久一区二区三区, | 在线观av | 久久久91精品国产一区二区精品 | 综合色狠狠| 正在播放亚洲精品 | 日本乱视频|