欲使用ifstream和ofstream,首先須要引用fstreamios
#include <fstream>
1、使用ifstream讀取文件的所有文本api
ifstream ifs; string path("src/test.txt");//考慮到最終程序最終執行環境是在工程目錄下的,因此這裏用此路徑 ifs.open(path);//open能夠傳第二個參數,六個值in:以讀方式打開;out:以寫方式打開,直接寫入將覆蓋,可是能夠移動指針,在文件末尾寫入;binary:操做方式將更傾向於二進制;ate:打開時在打開狀態輸出默認會在文件的末尾(EOF),但未在打開狀態會清空該文件;app:輸出也是在文件末尾展開,不會清空該文件;trunc:任何打開前的內容,都將會被清空。
值得注意的是:若是該文件的上層目錄不存在的話,將確定會失敗,反之,則沒有該文件時候,會自動建立一個
string str;
string line; if(ifs){//隱式轉換爲bool while(getline(ifs,line)){ str +=line; } cout<<str<<endl; }else{ cout<<"真很差意思,打開失敗了"<<endl; }
2、分先後兩段,讀取文件的所有文本app
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; }
3、直接在文件末尾添加一段文字學習
ofstream ofs; string path("src/test.txt"); ofs.open(path,ios::app);//以append方式打開文件 string text("三月,僞文學家發情的、無病呻吟的季節"); ofs.write(text.c_str(),text.length()); ofs.close();
4、複製文件的內容,用複製的內容替代之前的內容,其實至關於什麼都不幹spa
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,下次開始學習sstreamcode