std::basic_filebuf::seekoff

来自cppreference.com
< cpp‎ | io‎ | basic filebuf

protected:

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

                          std::ios_base::openmode which = std::ios_base::in | std::ios_base::out );
重新定位文件指针,如果可能的话,完全off字符开始,结束,或当前位置的文件(取决于way.
原文:
Repositions the file pointer, if possible, to the position that corresponds to exactly off characters from beginning, end, or current position of the file (depending on the value of way.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
如果相关的文件是不公开(is_open()==false,失败的价值对应的位置立即.
原文:
If the associated file is not open (is_open()==false, fails immediately.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
如果多字节字符编码状态而定(codecvt::encoding()返回-1)或可变长度(codecvt::encoding()返回0),和偏移off是不是0,立即失败:此功能不能确定对应的字节数off个字符
原文:
If the multibyte character encoding is state-dependent (codecvt::encoding() returned -1) or variable-length (codecvt::encoding() returned 0) and the offset off is not 0, fails immediately: this function cannot determine the number of bytes that correspond to off characters.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
way是不std::basic_ios::cur或偏移off是不0,和最反感操作这filebuf对象输出(,无论是认沽缓冲区是不是空的,或者最近调用的函数overflow()),然后调用std::codecvt::unshift来确定必要的不印字序列,以及该序列写入到该文件通过调用overflow().
原文:
If way is not std::basic_ios::cur or the offset off is not 0, and the most resent operation done on this filebuf object was output (that is, either the put buffer is not empty, or the most recently called function was overflow()), then calls std::codecvt::unshift to determine the unshift sequence necessary, and writes that sequence to the file by calling overflow().
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
,然后将参数转换way到如下类型whenceint
原文:
Then converts the argument way to a value whence of type int as follows:
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
值的way
原文:
value of way
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
value of whence
std::basic_ios::beg SEEK_SET
std::basic_ios::end SEEK_END
std::basic_ios::cur SEEK_CUR
,然后,如果字符编码是固定宽度(codecvt::encoding()返回一些的正数width,移动文件指针仿佛被std::fseek(file, width*off, whence).
原文:
Then, if the character encoding is fixed-width (codecvt::encoding() returns some positive number width, moves the file pointer as if by std::fseek(file, width*off, whence).
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
,否则,移动文件指针,如果std::fseek(file, 0, whence)
原文:
Otherwise, moves the file pointer as if by std::fseek(file, 0, whence).
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
openmode参数,需要通过基类的函数签名,通常被忽略,因为std::basic_filebuf中只有一个文件的位置.
原文:
The openmode argument, required by the base class function signature, is usually ignored, because std::basic_filebuf maintains only one file position.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

目录

[编辑] 参数

off -
相对位置设置位置指示器.
原文:
relative position to set the position indicator to.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
dir -
定义应用的相对偏移量的基础地位。它可以是以下常量之一:
常量 解释
beg 流的开始
end 流的结尾
cur 流位置指示器的当前位置
原文:
defines base position to apply the relative offset to. It can be one of the following constants:
常量 解释
beg 流的开始
end 流的结尾
cur 流位置指示器的当前位置
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
which -
定义的输入和/或输出序列影响。它可以是下列常数中的一个或组合:
常量 解释
in 影响输入序列
out 影响输出序列
原文:
defines which of the input and/or output sequences to affect. It can be one or a combination of the following constants:
常量 解释
in 影响输入序列
out 影响输出序列
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 返回值

一个新构造的对象的类型pos_type生成的文件存储位置,或在失败的pos_type(off_type(-1)).
原文:
A newly constructed object of type pos_type which stores the resulting file position, or pos_type(off_type(-1)) on failure.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 注释

seekoff()被称为std::basic_streambuf::pubseekoff,这就是所谓的std::basic_istream::seekgstd::basic_ostream::seekpstd::basic_istream::tellgstd::basic_ostream::tellp
原文:
seekoff() is called by std::basic_streambuf::pubseekoff, which is called by std::basic_istream::seekg, std::basic_ostream::seekp, std::basic_istream::tellg, and std::basic_ostream::tellp
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 示例

#include <iostream>
#include <fstream>
#include <locale>
int main()
{
    // prepare a 10-byte file holding 4 characters in UTF8
    std::ofstream("text.txt") << u8"z\u00df\u6c34\U0001d10b"; // or u8"zß水𝄋"
                                           // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b";
 
    // open using a non-converting encoding
    std::ifstream f1("text.txt");
    std::cout << "f1's locale's encoding() returns "
              << std::use_facet<std::codecvt<char, char, std::mbstate_t>>(f1.getloc()).encoding() << '\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-8
    std::wifstream f2("text.txt");
    f2.imbue(std::locale("en_US.UTF-8"));
    std::cout << "f2's locale's encoding() returns "
              << std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(f2.getloc()).encoding() << '\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';
 
}

输出:

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

[编辑] 另请参阅

调用 seekoff()
(std::basic_streambuf 的公开成员函数) [编辑]
用绝对寻址重寻位文件位置
(虚受保护成员函数) [编辑]
移动文件位置指示器到文件中的指定位置
(函数) [编辑]