<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 簡介 和文件有關系的輸入輸出類主要在fstream.h這個頭文件中被定義,在這個頭文件中主要被定義了三個類,由這三個類控制對文件的各種輸入輸出操作,他們分別是ifstream、ofstream、fstream,其中fstream類是由iostream類派生而來,他們之間的繼承關系見下圖所示: ![](https://img.kancloud.cn/bf/c1/bfc1a52c84d7fadb0b4f9785cd02c68e_485x271.png) 由于文件設備并不像顯示器屏幕與鍵盤那樣是標準默認設備,所以它在fstream頭文件中是沒有像cout那樣預先定義的全局對象,所以我們必須自己定義一個該類的對象。 ifstream類,它是從istream類派生的,用來支持從磁盤文件的輸入。 ofstream類,它是從ostream類派生的,用來支持向磁盤文件的輸出。 fstream類,它是從iostream類派生的,用來支持對磁盤文件的輸入輸出。 # 打開文件 所謂打開(open)文件是一種形象的說法,如同打開房門就可以進入房間活動一樣。 打開文件是指在文件讀寫之前做必要的準備工作,包括: 1)為文件流對象和指定的磁盤文件建立關聯,以便使文件流流向指定的磁盤文件。 2)指定文件的工作方式,如:該文件是作為輸入文件還是輸出文件,是ASCII文件還是二進制文件等。 以上工作可以通過兩種不同的方法實現: 1) 調用文件流的成員函數open。如 ~~~ ofstream outfile; //定義ofstream類(輸出文件流類)對象outfile outfile.open("f1.dat",ios::out); //使文件流與f1.dat文件建立關聯 ~~~ 第2行是調用輸出文件流的成員函數open打開磁盤文件f1.dat,并指定它為輸出文件, 文件流對象outfile將向磁盤文件f1.dat輸出數據。ios::out是I/O模式的一種,表示 以輸出方式打開一個文件。或者簡單地說,此時f1.dat是一個輸出文件,接收從內存 輸出的數據。 磁盤文件名可以包括路徑,如`"c:\\\\new\\\\f1.dat"`,如缺省路徑,則默認為當前目錄下的文件。 2) 在定義文件流對象時指定參數 在聲明文件流類時定義了帶參數的構造函數,其中包含了打開磁盤文件的功能。因此, 可以在定義文件流對象時指定參數,調用文件流類的構造函數來實現打開文件的功能。 ![](https://img.kancloud.cn/04/f3/04f321fa7613c8ae001e0eedf132dd1f_774x481.png) 幾點說明: 1) 新版本的I/O類庫中不提供ios::nocreate和ios::noreplace。 2) 每一個打開的文件都有一個文件指針,該指針的初始位置由I/O方式指定,每次讀寫都從文件指針的當前位置開始。每讀入一個字節,指針就后移一個字節。當文件指針移到最后,就會遇到文件結束EOF(文件結束符也占一個字節,其值為-1),此時流對象的成員函數eof的值為非0值(一般設為1),表示文件結束了。 3) 可以用“位或”運算符“|”對輸入輸出方式進行組合,如表13.6中最后3行所示那樣。還可以舉出下面一些例子: ~~~ ? ? ios::in | ios:: noreplace ?//打開一個輸入文件,若文件不存在則返回打開失敗的信息 ? ? ios::app | ios::nocreate ?//打開一個輸出文件,在文件尾接著寫數據,若文件不存在,則返回打開失敗的信息 ? ? ios::out l ios::noreplace ?//打開一個新文件作為輸出文件,如果文件已存在則返回打開失敗的信息 ? ? ios::in l ios::out I ios::binary ?//打開一個二進制文件,可讀可寫 ~~~ 但不能組合互相排斥的方式,如 `ios::nocreate l ios::noreplace`。 4) 如果打開操作失敗,open函數的返回值為0(假),如果是用調用構造函數的方式打開文件的,則流對象的值為0。可以據此測試打開是否成功。如 ~~~ ? ? if(outfile.open("f1.bat", ios::app) ==0) ? ? ? ? cout <<"open error"; 或 ? ? if( !outfile.open("f1.bat", ios::app) ) ? ? ? ? cout <<"open error"; ~~~ # 關閉文件 在對已打開的磁盤文件的讀寫操作完成后,應關閉該文件。關閉文件用成員函數close。如:outfile.close( ); ?//將輸出文件流所關聯的磁盤文件關閉 所謂關閉,實際上是解除該磁盤文件與文件流的關聯,原來設置的工作方式也失效,這樣,就不能再通過文件流對該文件進行輸入或輸出. # 二進制文件的讀寫操作 二進制文件不是以ASCII代碼存放數據的,它將內存中數據存儲形式不加轉換地傳送到磁盤文件,因此它又稱為內存數據的映像文件。因為文件中的信息不是字符數據,而是字節中的二進制形式的信息,因此它又稱為字節文件。 對二進制文件的操作也需要先打開文件,用完后要關閉文件。在打開時要用ios::binary指定為以二進制形式傳送和存儲。二進制文件除了可以作為輸入文件或輸出文件外,還可以是既能輸入又能輸出的文件。這是和ASCII文件不同的地方 **用成員函數read和write讀寫二進制文件** 對二進制文件的讀寫主要用istream類的成員函數read和write來實現。這兩個成員函數的原型為 ~~~ ? ? istream& read(char *buffer,int len); ? ? ostream& write(const char * buffer,int len); ~~~ 字符指針buffer指向內存中一段存儲空間。len是讀寫的字節數。調用的方式為:a. write(p1,50); ? ? b. read(p2,30); 上面第一行中的a是輸出文件流對象,write函數將字符指針p1所給出的地址開始的50個字節的內容不加轉換地寫到磁盤文件中。在第二行中,b是輸入文件流對象,read 函數從b所關聯的磁盤文件中,讀入30個字節(或遇EOF結束),存放在字符指針p2所指的一段空間內。 # ASCII文件的讀寫操作 如果文件的每一個字節中均以ASCII代碼形式存放數據,即一個字節存放一個字符,這個文件就是ASCII文件(或稱字符文件)。程序可以從ASCII文件中讀入若干個字符,也可以向它輸出一些字符。 1) 用流插入運算符“>”輸入輸出標準類型的數據。“>”都巳在iostream中被重載為能用于ostream和istream類對象的標準類型的輸入輸出。由于ifstream和 ofstream分別是ostream和istream類的派生類;因此它們從ostream和istream類繼承了公用的重載函數,所以在對磁盤文件的操作中,可以通過文件流對象和流插入運算符“>”實現對磁盤 文件的讀寫,如同用cin、cout和>對標準設備進行讀寫一樣。 2) 用文件流的put、get、geiline等成員函數進行字符的輸入輸出:用C++流成員函數put輸出單個字符、C++ get()函數讀入一個字符和C++ getline()函數讀入一行字符。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看