c++學習筆記:檔案流的各種操作

來源:互聯網
上載者:User

標籤:上層   沒有   clu   ==   bin   環境   位元組   執行環境   一半   

欲使用ifstream和ofstream,首先需要引用fstream

#include <fstream>

一、使用ifstream讀取檔案的全部文本

ifstream ifs;   string path("src/test.txt");//考慮到最終程式最終執行環境是在工程目錄下的,所以這裡用此路徑   ifs.open(path);//open可以傳第二個參數,六個值in:以讀方式開啟;out:以寫方式開啟,直接寫入將覆蓋,但是可以移動指標,在檔案末尾寫入;binary:操作方式將更傾向於二進位;ate:輸出預設會在檔案的末尾開展,但開啟時會清空該檔案;app:輸出也是在檔案末尾展開,
不會清空該檔案;trunc:任何開啟前的內容,都將會被清空。
值得注意的是:如果該檔案的上層目錄不存在的話,將肯定會失敗,反之,則沒有該檔案時候,會自動建立一個

string str;
string line; if(ifs){//隱式轉換為bool while(getline(ifs,line)){ str +=line; } cout<<str<<endl; }else{ cout<<"真不好意思,開啟失敗了"<<endl; }

 二、分前後兩段,讀取檔案的全部文本

ifstream ifs;   string path("src/test.txt");   ifs.open(path,ios::binary);   if(ifs){      ifs.seekg(0,ios::end);//指標指向流的末尾,相對於末尾的位移量為0,另外此方法還有傳入一個參數的重載版本,傳入的是一個相對於檔案結束位置的絕對值      int length = static_cast<int>(ifs.tellg());//tellg返回當前指標的位置,從0開始,end指向的剛好是檔案結束位置的下一位,所以end的位置剛好是檔案的位元組數,所以如果是漢字,使用二進位一半一半讀取的話,中間一個漢字可能被拆分而成為亂碼      ifs.seekg(0,ios::beg);//可以穿 end:流的末位的下一位,beg:流的開始位置和cur:當前讀取位置。      int strLength1 = length/2;      int strLength2 = length%2==0?strLength1:strLength1;      char str1[strLength1+1];      char str2[strLength2+1];      ifs.read(str1,strLength1);      ifs.read(str2,strLength2);      ifs.close();      cout<<str1<<endl<<endl<<endl<<endl<<str2;   }else{       cout<<"真不好意思,開啟失敗了"<<endl;   }

三、直接在檔案末尾添加一段文字

       ofstream ofs;       string path("src/test.txt");       ofs.open(path,ios::app);//以append方式開啟檔案       string text("三月,偽文學家發情的、無病呻吟的季節");       ofs.write(text.c_str(),text.length());       ofs.close();

四、複製檔案的內容,用複製的內容替代以前的內容,其實相當於什麼都不幹

ifstream ifs;    string path("src/test.txt");    ifs.open(path,ios::in);    char* data;    int length = -1;    if(ifs){        ifs.seekg(0,ios::end);        length = static_cast<int>(ifs.tellg());        ifs.seekg(0,ios::beg);        char str[length+1];        data = str;        ifs.read(str,length);        ifs.close();    }    if(length!=-1){        ofstream ofs;            ofs.open(path,ios::ate|ios::out);//清空模式           if(ofs){                ofs.write(data,length);                ofs.close();                cout<<"寫入成功"<<endl;            }    }

此外,如果讀取一個檔案之後,需要讀取下一個,直接調用clear方法就可以接著幹了。

嗯,最常用的方法就學到這裡,其他的遇到自行查閱api,下次開始學習sstream

c++學習筆記:檔案流的各種操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.