乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C ++文件流操作

       WUCANADA 2013-06-16

      C++文件流操作

      分類: C++ 31人閱讀 評論(0) 收藏 舉報

      文件流操作

      所謂文件,一般指存在外部介質(zhì)上的數(shù)據(jù)的集合。根據(jù)數(shù)據(jù)組織形式,C++將其分為

      文本文件和二進制文件。

      文本文件又稱ASCII文件,它的每個字節(jié)存放一個ASCII碼。

      代表一個字符,在內(nèi)存和外設(shè)上的文件流傳輸需要經(jīng)過類型轉(zhuǎn)換,將內(nèi)存中的值轉(zhuǎn)換為

      對應(yīng)的ASCII碼,再存放到外設(shè)中。

      二進制文件,則是把內(nèi)存中的數(shù)據(jù),按其在內(nèi)存中的存儲形式原樣寫到磁盤上存放,不

      作任何轉(zhuǎn)換。

      ASCII編碼格式的用:fstream ifstream ofstream 類處理

      Unicode編碼格式的用:wfstream wifstream wofstream類處理

      文件流的基本操作:1、打開文件 2、讀取數(shù)據(jù) 3、處理數(shù)據(jù) 4、數(shù)據(jù)寫回 

      5、關(guān)閉文件 

      一、打開文件

      實質(zhì):在內(nèi)存中建立起一個數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)與文件相對應(yīng),包括文件的名稱

      、起始位置、大小、當前讀寫位置等。

      用文件流類打開文件有兩種方式:1、調(diào)用類的構(gòu)造函數(shù) 2、調(diào)用成員函數(shù)open

      1、構(gòu)造函數(shù)的種類

      所有的文件流類都有兩個版本的構(gòu)造函數(shù)

      fstream的構(gòu)造函數(shù)

      fstream();

      explicit fstream(const char * filename,

      ios_base::openmode  mode=ios_base::in|ios_base::out);

      ifstream的構(gòu)造函數(shù)

      ifstream();

      explicit ifstream(const char * filename,

      ios_base::openmode  mode=ios_base::in);

      ofstream的構(gòu)造函數(shù)

      ofstream();

      explicit ofstream(const char * filename,

      ios_base::openmode  mode=ios_base::out);

      注:

      帶參數(shù)的是直接打開目標文件(只可處理該文件,不可替換打開其它文件)

      不帶參數(shù)的意味著目標文件還沒有確定,可以使用open函數(shù)指定,open

      參數(shù)表與上面的參數(shù)表相同,

      打開新文件之前,需要執(zhí)行close關(guān)閉原來的文件,否則open會調(diào)用返回失敗。

      文件流對象.fali( );測試是否打開成功。

      2、打開方式

      openmode

      功能

      ios::app

      打開一個輸出文件,用于將數(shù)據(jù)添加到文件尾部

      ios::ate

      打開一個現(xiàn)在文件,把文件指針移動文件末尾

      ios::binary

      以二進制方式打開一個文件,默認為文本文件

      ios::in

      打開一個文件,以便進行輸入操作

      ios::out 

      打開一個文件,以便進行輸出操作

      ios::trunc

      打開一個文件,如果文件已存在,刪除其中全部數(shù)據(jù),如果文件不存在,則建立新文件

      ios::nocreate

      打開一個文件,如果文件不存在,則打開失敗

      ios::noreplace

      打開一個文件,如果文件存在,則打開失敗

      注:新的C++類庫,不再提供 nocreate noreplace,可使用“ | ”,來組合打開方式

      而且只有binary 才能指定是二進制文件。

      二、數(shù)據(jù)操作(讀取,處理,寫回)

      1、格式化讀寫(或者稱直接文本讀寫,使用 << >> 直接讀取和寫入普通字符)

      一般用于默認打式方式(文本文件打開方式)的處理,如:

      輸出文件流對象<<”Hello World!”;這面的終端是文件,而不是屏幕

      輸入文件流對象>>var; 將文件中的文本讀取到變量var中。

      這里是按文本格式輸入輸出,中間有格式的轉(zhuǎn)換。

      2、無格式讀寫

      istream中定義的成員函數(shù)

      int get(char c);每次讀取一個字節(jié)(字符)

      read(char * buff , int len);每次讀取len個字節(jié)(字符)到buff中

      ostream中定義的成員函數(shù)

      int put(char c);每次向文件寫入一個字節(jié)(字符)

      wirte(const char * buff ,  int len );每次向文件寫入buff中前l(fā)en個字節(jié)(字符)

      有多個重載版本。

      三、文件流的狀態(tài)判斷

      1、檢測文件結(jié)束

      函數(shù)原型:

      int eof(); 如果返回0,則表示到了文件流尾。

      2、文件是否成功打開

      bool is_open();如果返回true,則表示成功打開

      3、文件流的狀態(tài)

      有4種基本狀態(tài),四個靜態(tài)數(shù)據(jù)成員

      iostate值

      含義

      ios_base::eofbit

      已經(jīng)到達文件尾

      ios_base::badbit

      流的完整性被破壞

      ios_base::failbit

      不能讀寫期望的數(shù)據(jù)

      ios_base::goodbit

      流處理正常的狀態(tài)

      同一般數(shù)據(jù)流的操作一樣,文件流也可以通過調(diào)用相應(yīng)的函數(shù)來判斷是否處于某種狀態(tài)。

      例如:

      eof()——檢測———>ios_base::badbit

      fail()————檢測————>ios_base::failbit或ios_base::badbit

      good()————檢測————>

      ios_base::eofbit

      ios_base::badbit

      ios_base::failbit

      注意:當用同一個文件流對象處理不同的文件時,需要清除前一個文件操作留下的狀態(tài)值,使用clear();,否則在后面處理時進行狀態(tài)判斷會導(dǎo)致意外的結(jié)果。

      四、重定位文件讀寫位置

      類istream提供了3個成員函數(shù)來對讀指針進行操作

      tellg(); 返回輸入文件讀指針的當前位置

      seekg(文件中的位置); 將輸入文件中讀指針移到指定的位置

      seekg(位移量,參照位置); 以參照位置為基準移動若干字節(jié)

      類ostream提供了3個成員函數(shù)來對寫指針進行操作

      tellp(); 返回輸出文件寫指針的當前位置

      seekp(文件中的位置); 將輸出文件中寫指針移動指定的位置

      seekp(位移量,參照位置); 以參照位置為基準移動若干字節(jié)

      注:文件中的位置和位移量 都是long型整數(shù),以字節(jié)為單位,

      參照位置可以是下面三者之一:

      ios::beg 文件開頭

      ios::cur 文件指針當前位置

      ios::end 文件末尾

      如果位移量為正,則向后,為負則向前。

      如果是fstream對象,則可以任意使用這些函數(shù)。

      五、關(guān)閉文件

      成員函數(shù):

      close();

      測試程序:

      1. #include <iostream>  
      2.   
      3. #include <fstream>  
      4.   
      5. #include <string>  
      6.   
      7. using namespace std;  
      8.   
      9. int main()  
      10.   
      11. {  
      12.   
      13.     char buff[4096];//設(shè)置緩沖區(qū)  
      14.   
      15.     //創(chuàng)建一個輸入流對象  
      16.   
      17.     ifstream in_file("site.tar",ios::binary);//兩個流對象同時采用二進制方式 //拷貝文件名可自行修改  
      18.   
      19.     if(!in_file)  
      20.   
      21.     {  
      22.   
      23.         cout<<"文件不存在!"<<endl;  
      24.   
      25.          exit(0);  
      26.   
      27.     }  
      28.   
      29.     //創(chuàng)建輸出流對象  
      30.   
      31.     ofstream copy_file("site2.tar",ios::binary|ios::trunc|ios::out); // 若加ios::trunc//與文件創(chuàng)建鏈接,如果文件不存在,則創(chuàng)建文件,文件存在,先刪除原文件再創(chuàng)建  
      32.   
      33.     if(!copy_file)  
      34.   
      35.     {  
      36.   
      37.         cout<<"數(shù)據(jù)復(fù)制失敗"<<endl;  
      38.   
      39.      }  
      40.   
      41.     else  
      42.   
      43.     {  
      44.   
      45.         while(!in_file.eof())//沒有到文件尾  
      46.   
      47.         {  
      48.   
      49.             in_file.read(buff,1024);  
      50.   
      51.             int n=in_file.gcount();//讀取實際read的字符數(shù)  
      52.   
      53.             copy_file.write(buff,n);  
      54.   
      55.         }  
      56.   
      57.         cout<<"數(shù)據(jù)復(fù)制成功"<<endl;  
      58.   
      59.            
      60.   
      61.     }  
      62.   
      63.     in_file.close();  
      64.   
      65.     copy_file.close();  
      66.   
      67.     return 0;  
      68.   
      69. }

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多