Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::basic_filebuf<CharT,Traits>::seekoff

      From cppreference.com
      <cpp‎ |io‎ |basic filebuf
       
       
       
       
      protected:

      virtual pos_type seekoff( off_type off,
                               std::ios_base::seekdir dir,

                               std::ios_base::openmode which=std::ios_base::in|std::ios_base::out);

      Repositions the file pointer, if possible, to the position that corresponds to exactlyoff characters from beginning, end, or current position of the file (depending on the value ofdir).

      If the associated file is not open (is_open()==false), fails immediately.

      If the multibyte character encoding is state-dependent (codecvt::encoding() returned-1) or variable-length (codecvt::encoding() returned0) and the offsetoff is not0, fails immediately: this function cannot determine the number of bytes that correspond tooff characters.

      Ifdir is notstd::basic_ios::cur or the offsetoff is not0, and the most recent operation done on this filebuf object was output (that is, either the put buffer is not empty, or the most recently called function wasoverflow()), then callsstd::codecvt::unshift to determine the unshift sequence necessary, and writes that sequence to the file by callingoverflow().

      Then converts the argumentdir to a valuewhence of typeint as follows:

      value ofdir value ofwhence
      std::basic_ios::begSEEK_SET
      std::basic_ios::endSEEK_END
      std::basic_ios::curSEEK_CUR

      Then, if the character encoding is fixed-width (codecvt::encoding() returns some positive numberwidth), moves the file pointer as if bystd::fseek(file, width*off, whence).

      Otherwise, moves the file pointer as if bystd::fseek(file,0, whence).

      Theopenmode argument, required by the base class function signature, is usually ignored, becausestd::basic_filebuf maintains only one file position.

      Contents

      [edit]Parameters

      off - relative position to set the position indicator to
      dir - defines base position to apply the relative offset to. It can be one of the following constants:
      Constant Explanation
      beg the beginning of a stream
      end the ending of a stream
      cur the current position of stream position indicator
      which - defines which of the input and/or output sequences to affect. It can be one or a combination of the following constants:
      Constant Explanation
      in affect the input sequence
      out affect the output sequence

      [edit]Return value

      A newly constructed object of typepos_type which stores the resulting file position, orpos_type(off_type(-1)) on failure.

      [edit]Notes

      seekoff() is called bystd::basic_streambuf::pubseekoff, which is called bystd::basic_istream::seekg,std::basic_ostream::seekp,std::basic_istream::tellg, andstd::basic_ostream::tellp.

      [edit]Example

      Run this code
      #include <fstream>#include <iostream>#include <locale> template<typename CharT>int get_encoding(conststd::basic_istream<CharT>& stream){using Facet=std::codecvt<CharT,char,std::mbstate_t>;returnstd::use_facet<Facet>(stream.getloc()).encoding();} int main(){// prepare a 10-byte file holding 4 characters ("zß水𝄋") in UTF-8std::ofstream("text.txt")<<"\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"; // open using a non-converting encodingstd::ifstream f1("text.txt");std::cout<<"f1's locale's encoding() returns "<< get_encoding(f1)<<'\n'<<"pubseekoff(3, beg) returns "<< f1.rdbuf()->pubseekoff(3,std::ios_base::beg)<<'\n'<<"pubseekoff(0, end) returns "<< f1.rdbuf()->pubseekoff(0,std::ios_base::end)<<'\n'; // open using UTF-8std::wifstream f2("text.txt");    f2.imbue(std::locale("en_US.UTF-8"));std::cout<<"f2's locale's encoding() returns "<< get_encoding(f2)<<'\n'<<"pubseekoff(3, beg) returns "<< f2.rdbuf()->pubseekoff(3,std::ios_base::beg)<<'\n'<<"pubseekoff(0, end) returns "<< f2.rdbuf()->pubseekoff(0,std::ios_base::end)<<'\n';}

      Output:

      f1's locale's encoding() returns 1pubseekoff(3, beg) returns 3pubseekoff(0, end) returns 10f2's locale's encoding() returns 0pubseekoff(3, beg) returns -1pubseekoff(0, end) returns 10

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 55C++98seekoff returned an undefined
      invalid stream position on failure
      pos_type(off_type(-1))
      is returned on failure

      [edit]See also

      invokesseekoff()
      (public member function ofstd::basic_streambuf<CharT,Traits>)[edit]
      [virtual]
      repositions the file position, using absolute addressing
      (virtual protected member function)[edit]
      moves the file position indicator to a specific location in a file
      (function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/basic_filebuf/seekoff&oldid=158142"

      [8]ページ先頭

      ©2009-2025 Movatter.jp