Files
hustoj/web/cppreference-zh/chmhelp/cpp-io-basic_filebuf-seekpos.html
2025-08-01 12:57:54 +08:00

157 lines
13 KiB
HTML

<!DOCTYPE html>
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>std::basic_filebuf&lt;CharT,Traits&gt;::seekpos</title>
<link rel="stylesheet" href="ext.css" />
<link rel="stylesheet" href="site_modules.css" />
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_io_basic_filebuf_seekpos skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::basic_filebuf&lt;CharT,Traits&gt;::</span>seekpos</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="cpp.html">cpp</a>&lrm; | <a href="cpp-io.html">io</a>&lrm; | <a href="cpp-io-basic_filebuf.html">basic filebuf</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<table class="t-dcl-begin">
<tbody>
<tr class="t-dcl">
<td class="t-dcl-nopad">
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">protected</span><span class="sy4">:</span><br /></span>
<p><span class="kw1">virtual</span> pos_type seekpos<span class="br0">(</span> pos_type sp,<br /></p>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="cpp-io-ios_base-openmode.html"><span class="kw1671">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">openmode</span></span></a> which <span class="sy1">=</span> <a href="cpp-io-ios_base-openmode.html"><span class="kw1674">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">in</span></span></a> <span class="sy3">|</span> <a href="cpp-io-ios_base-openmode.html"><span class="kw1675">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">out</span></span></a> <span class="br0">)</span><span class="sy4">;</span></div>
</td>
<td class="t-dcl-nopad"></td>
<td class="t-dcl-nopad"></td>
</tr>
<tr class="t-dcl-sep">
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>&#33509;&#21487;&#33021;&#65292;&#21017;&#37325;&#23547;&#20301;&#25991;&#20214;&#25351;&#38024;&#21040; <code>sp</code> &#25152;&#25351;&#31034;&#30340;&#20301;&#32622;&#12290;</p>
<p>&#33509;&#20851;&#32852;&#25991;&#20214;&#26410;&#25171;&#24320;&#65288; <span class="t-c"><span class="mw-geshi cpp source-cpp">is_open<span class="br0">(</span><span class="br0">)</span><span class="sy1">==</span><span class="kw2">false</span></span></span> &#65289;&#65292;&#21017;&#31435;&#21363;&#22833;&#36133;&#12290;</p>
<p>&#33509;&#25991;&#20214;&#20026;&#20889;&#20837;&#25171;&#24320;&#65292;&#21017;&#39318;&#20808;&#29992; <span class="t-lc"><a href="cpp-io-basic_streambuf-overflow.html">overflow()</a></span> &#20889;&#20837;&#25918;&#32622;&#21306;&#21644;&#20219;&#20309;&#24403;&#21069;&#24863;&#26579;&#30340; locale &#25152;&#35201;&#27714;&#30340;&#21453;&#36801;&#31227;&#24207;&#21015;&#12290;</p>
<p>&#28982;&#21518;&#22914;&#21516;&#36890;&#36807;&#35843;&#29992; <span class="t-lc"><a href="cpp-io-c-fsetpos.html">std::fsetpos()</a></span> &#37325;&#23547;&#20301;&#25351;&#38024;&#12290;</p>
<p>&#33509;&#25991;&#20214;&#20026;&#35835;&#21462;&#25171;&#24320;&#65292;&#21017;&#33509;&#38656;&#35201;&#21017;&#26356;&#26032;&#33719;&#21462;&#21306;&#12290;</p>
<p>&#33509; <code>sp</code> &#19981;&#26159;&#30001;&#22312;&#21516;&#19968;&#25991;&#20214;&#19978;&#35843;&#29992; <span class="t-lc"><a href="cpp-io-basic_streambuf-pubseekoff.html">seekoff()</a></span> &#25110; <code>seekpos()</code> &#33719;&#24471;&#65292;&#21017;&#34892;&#20026;&#26410;&#23450;&#20041;&#12290;</p>
<h3><span class="mw-headline" id=".E5.8F.82.E6.95.B0">&#21442;&#25968;</span></h3>
<table class="t-par-begin">
<tr class="t-par">
<td>sp</td>
<td>-</td>
<td>&#20043;&#21069;&#22312;&#21516;&#19968;&#25991;&#20214;&#19978;&#35843;&#29992; <span class="t-lc"><a href="cpp-io-basic_streambuf-pubseekoff.html">seekoff()</a></span> &#25110; <code>seekpos()</code> &#33719;&#24471;&#30340;&#25991;&#20214;&#20301;&#32622;</td>
</tr>
<tr class="t-par">
<td>which</td>
<td>-</td>
<td>&#30830;&#23450;&#35201;&#24433;&#21709;&#36755;&#20837;&#21644;/&#25110;&#36755;&#20986;&#24207;&#21015;&#30340;&#21738;&#20010;&#12290;&#23427;&#33021;&#20026;&#19979;&#21015;&#24120;&#37327;&#20043;&#19968;&#25110;&#20854;&#32452;&#21512;&#65306;
<table class="t-dsc-begin">
<tr class="t-dsc-hitem">
<td>&#24120;&#37327;</td>
<td>&#35299;&#37322;</td>
</tr>
<tr class="t-dsc">
<td><a href="cpp-io-ios_base-openmode.html"><tt>in</tt></a></td>
<td>&#24433;&#21709;&#36755;&#20837;&#24207;&#21015;</td>
</tr>
<tr class="t-dsc">
<td><a href="cpp-io-ios_base-openmode.html"><tt>out</tt></a></td>
<td>&#24433;&#21709;&#36755;&#20986;&#24207;&#21015;</td>
</tr>
</table>
</td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.BF.94.E5.9B.9E.E5.80.BC">&#36820;&#22238;&#20540;</span></h3>
<p>&#25104;&#21151;&#26102;&#20026; <code>sp</code> &#65292;&#22833;&#36133;&#26102;&#20026; <span class="t-c"><span class="mw-geshi cpp source-cpp">pos_type<span class="br0">(</span>off_type<span class="br0">(</span><span class="sy2">-</span><span class="nu0">1</span><span class="br0">)</span><span class="br0">)</span></span></span> &#12290;</p>
<h3><span class="mw-headline" id=".E6.B3.A8.E6.84.8F">&#27880;&#24847;</span></h3>
<p><code>seekpos()</code> &#20026; <span class="t-lc"><a href="cpp-io-basic_streambuf-pubseekpos.html">std::basic_streambuf::pubseekpos()</a></span> &#25152;&#35843;&#29992;&#65292;&#21518;&#32773;&#20026; <span class="t-lc"><a href="cpp-io-basic_istream-seekg.html">std::basic_istream::seekg()</a></span> &#21644; <span class="t-lc"><a href="cpp-io-basic_ostream-seekp.html">std::basic_ostream::seekp()</a></span> &#30340;&#21333;&#21442;&#25968;&#29256;&#26412;&#35843;&#29992;&#12290;</p>
<p>&#35768;&#22810;&#23454;&#29616;&#19981;&#20110; <code>seekpos()</code> &#20013;&#26356;&#26032;&#33719;&#21462;&#21306;&#65292;&#32780;&#26159;&#22996;&#25176;&#32473;&#19979;&#27425; <span class="t-lc"><a href="cpp-io-basic_streambuf-sgetc.html">sgetc()</a></span> &#25152;&#35843;&#29992;&#30340; <span class="t-lc"><a href="cpp-io-basic_streambuf-underflow.html">underflow()</a></span> &#12290;</p>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</span></h3>
<div class="t-example">
<p>&#19968;&#20123;&#23454;&#29616;&#19978;&#65292; seekpos() &#28165;&#31354;&#33719;&#21462;&#21306;&#24182;&#38656;&#35201;&#31532;&#20108;&#20010; underflow() &#20197;&#35266;&#27979;&#25928;&#26524;</p>
<div class="t-example-live-link"></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co2">#include &lt;fstream&gt;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="kw1">struct</span> mybuf <span class="sy4">:</span> <a href="cpp-io-basic_filebuf.html"><span class="kw1725">std::<span class="me2">filebuf</span></span></a>
<span class="br0">{</span>
pos_type seekpos<span class="br0">(</span>pos_type sp, <a href="cpp-io-ios_base-openmode.html"><span class="kw1671">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">openmode</span></span></a> which<span class="br0">)</span> <span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Before seekpos(&quot;</span> <span class="sy1">&lt;&lt;</span> sp <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;), size of the get area is &quot;</span>
<span class="sy1">&lt;&lt;</span> egptr<span class="br0">(</span><span class="br0">)</span><span class="sy2">-</span>eback<span class="br0">(</span><span class="br0">)</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; with &quot;</span>
<span class="sy1">&lt;&lt;</span> egptr<span class="br0">(</span><span class="br0">)</span><span class="sy2">-</span>gptr<span class="br0">(</span><span class="br0">)</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; read positions available<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
pos_type rc <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">filebuf</span><span class="sy4">::</span><span class="me2">seekpos</span><span class="br0">(</span>sp, which<span class="br0">)</span><span class="sy4">;</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;seekpos() returns &quot;</span> <span class="sy1">&lt;&lt;</span> rc <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;.<span class="es1">\n</span>After the call, &quot;</span>
<span class="sy1">&lt;&lt;</span> <span class="st0">&quot;size of the get area is &quot;</span>
<span class="sy1">&lt;&lt;</span> egptr<span class="br0">(</span><span class="br0">)</span><span class="sy2">-</span>eback<span class="br0">(</span><span class="br0">)</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; with &quot;</span>
<span class="sy1">&lt;&lt;</span> egptr<span class="br0">(</span><span class="br0">)</span><span class="sy2">-</span>gptr<span class="br0">(</span><span class="br0">)</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot; read positions available<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="co1">// &#33509; seekpos() &#28165;&#31354;&#33719;&#21462;&#21306;&#21017;&#21453;&#27880;&#37322;</span>
<span class="co1">// std::filebuf::underflow();</span>
<span class="co1">// std::cout &lt;&lt; &quot;after forced underflow(), size of the get area is &quot;</span>
<span class="co1">// &lt;&lt; egptr()-eback() &lt;&lt; &quot; with &quot;</span>
<span class="co1">// &lt;&lt; egptr()-gptr() &lt;&lt; &quot; read positions available\n&quot;;</span>
<span class="kw1">return</span> rc<span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
mybuf buf<span class="sy4">;</span>
buf.<span class="me1">open</span><span class="br0">(</span><span class="st0">&quot;test.txt&quot;</span>, <a href="cpp-io-ios_base-openmode.html"><span class="kw1674">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">in</span></span></a><span class="br0">)</span><span class="sy4">;</span>
<a href="cpp-io-basic_istream.html"><span class="kw1727">std::<span class="me2">istream</span></span></a> stream<span class="br0">(</span><span class="sy3">&amp;</span>buf<span class="br0">)</span><span class="sy4">;</span>
stream.<span class="me1">get</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#35835;&#19968;&#20010;&#23383;&#31526;&#20197;&#24378;&#21046; underflow()</span>
stream.<span class="me1">seekg</span><span class="br0">(</span><span class="nu0">2</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#21487;&#33021;&#30340;&#36755;&#20986;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="text source-text">
<pre class="de1">Before seekpos(2), size of the get area is 110 with 109 read positions available
seekpos() returns 2.
After the call, size of the get area is 110 with 108 read positions available</pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<table class="t-dsc-begin">
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-io-basic_streambuf-pubseekpos.html"><span class="t-lines"><span>pubseekpos</span></span></a></div>
</div>
</td>
<td>&#35843;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp">seekpos<span class="br0">(</span><span class="br0">)</span></span></span><br />
<span class="t-mark">(<code>std::basic_streambuf&lt;CharT,Traits&gt;</code> &#30340;&#20844;&#24320;&#25104;&#21592;&#20989;&#25968;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-io-basic_filebuf-seekoff.html"><span class="t-lines"><span>seekoff</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[&#34394;]</span></span></span></div>
</div>
</td>
<td>&#29992;&#30456;&#23545;&#23547;&#22336;&#37325;&#23547;&#20301;&#25991;&#20214;&#20301;&#32622;<br />
<span class="t-mark">(&#34394;&#21463;&#20445;&#25252;&#25104;&#21592;&#20989;&#25968;)</span></td>
</tr>
<tr class="t-dsc">
<td>
<div class="t-dsc-member-div">
<div><a href="cpp-io-c-fseek.html"><span class="t-lines"><span>fseek</span></span></a></div>
</div>
</td>
<td>&#31227;&#21160;&#25991;&#20214;&#20301;&#32622;&#25351;&#31034;&#22120;&#21040;&#25991;&#20214;&#20013;&#30340;&#25351;&#23450;&#20301;&#32622;<br />
<span class="t-mark">(&#20989;&#25968;)</span></td>
</tr>
</table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>