二进制文件及文件的随机读写(4)

4、阅读并运行下面的示例,体会二进制文件和字符串流操作的一般方法。例16

<code class="hljs cpp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include<iostream></span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <fstream></span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include<cstdlib></span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">namespace</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">struct</span> student{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> num;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> name[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>];<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span> score;};<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> main( ){student stud[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>]={<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1001</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Li"</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">85</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1002</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Fun"</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">97.5</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1004</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Wang"</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">54</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1006</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Tan"</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">76.5</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1010</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ling"</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">96</span>};fstream iofile(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"stud.dat"</span>,ios::in|ios::out|ios::binary);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//用fstream类定义输入输出二进制文件流对象iofile</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(!iofile){<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cerr</span><<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"open error!"</span><<endl;<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">abort</span>( );}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//(1)向磁盘文件输出5个学生的数据并显示出来</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(1)向磁盘文件输出5个学生的数据并显示出来"</span><<endl;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;i<<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>;i++){iofile.write((<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *)&stud[i],<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">sizeof</span>(stud[i]));<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<stud[i].num<<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" "</span><<stud[i].name<<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" "</span><<stud[i].score<<endl;}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来"</span><<endl;student stud1[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>];<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//用来存放从磁盘文件读入的数据</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span>(i=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;i<<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>;i=i+<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>){iofile.seekg(i*<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">sizeof</span>(stud[i]),ios::beg); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//定位于第0,2,4学生数据开头</span>iofile.read((<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *)&stud1[i/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>],<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">sizeof</span>(stud1[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]));<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//先后读入3个学生的数据,存放在stud1[0],stud[1]和stud[2]中</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<stud1[i/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>].num<<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" "</span><<stud1[i/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>].name<<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" "</span><<stud1[i/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>].score<<endl;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//输出stud1[0],stud[1]和stud[2]各成员的值</span>}<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<endl;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//(3) 将第3个学生的数据修改后存</span>回磁盘文件中的原有位置。<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(3)将第3个学生的数据修改后存回磁盘文件中的原有位置"</span><<endl;stud[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>].num=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1012</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//修改第3个学生(序号为2)的数据</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">strcpy</span>(stud[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>].name,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Wu"</span>);stud[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>].score=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">60</span>;iofile.seekp(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>*<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">sizeof</span>(stud[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]),ios::beg); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//定位于第3个学生数据的开头</span>iofile.write((<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *)&stud[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>],<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">sizeof</span>(stud[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>])); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//更新第3个学生数据</span>iofile.seekg(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,ios::beg);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//重新定位于文件开头</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//(4)从磁盘文件读入修改后的5个学生的数据并显示出来。</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"(4)从磁盘文件读入修改后的5个学生的数据并显示出来"</span><<endl;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span>(i=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;i<<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>;i++){iofile.read((<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">char</span> *)&stud[i],<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">sizeof</span>(stud[i])); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//读入5个学生的数据</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<stud[i].num<<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" "</span><<stud[i].name<<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" "</span><<stud[i].score<<endl;}iofile.close( );<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li></ul>可是,我却迈不开步伐,怎么也走不出那个圈……

二进制文件及文件的随机读写(4)

相关文章:

你感兴趣的文章:

标签云: