1. 程式人生 > 實用技巧 >C++檔案流:fstream

C++檔案流:fstream

最近想寫個簡單obj格式的解析程式,要用到檔案讀取/寫入的操作,之前都是用C的標準庫來處理,這次想試試C++的標準庫函式,網上看了些別人寫的部落格,感覺有點亂,然後找到這個網站http://www.cplusplus.com/reference/fstream/fstream/,似乎時c++標準庫的官方網站,內容非常棒

fstream是iostream的子類:

fstream包含了ifstream和ofstream分別讀取流和寫入流

官方文件的一個示例:

fstream fs("fname");
if (fs.is_open())
  {
    fs << "lorem ipsum";
    std::cout 
<< "Operation successfully performed\n"; fs.close(); } else { std::cout << "Error opening file"; }

開啟容易我們關注的是讀取其中的內容,這裡有幾個主要的函式:

1.獲取檔案大小

方法還是和C的一樣

ifs.seekg(0, ifs.end);
int length = ifs.tellg();  //檔案大小儲存在length,單位為位元組
ifs.seekg(0, ifs.beg);

2.get()函式

int get();
istream
& get (char& c); istream& get (char* s, streamsize n); istream& get (char* s, streamsize n, char delim); istream& get (streambuf& sb); istream& get (streambuf& sb, char delim);

英文的介紹是:Get characters

3.getline()函式

istream& getline (char* s, streamsize n );
istream
& getline (char* s, streamsize n, char delim );

引數就是個char陣列,n一般填陣列大小,delim類似分隔符,比如設定為空格的話,遇到空格就返回,空格後的內容下次呼叫getline才會讀取

4.read()函式

istream& read (char* s, streamsize n);

直接讀取n個位元組的資料儲存到s中,解析txt肯定用這個函數了

官方示例程式碼:

std::ifstream is ("test.txt", std::ifstream::binary);
  if (is) {
    // get length of file:
    is.seekg (0, is.end);
    int length = is.tellg();
    is.seekg (0, is.beg);

    char * buffer = new char [length];

    std::cout << "Reading " << length << " characters... ";
    // read data as a block:
    is.read (buffer,length);
    //在這裡資料處理    
    delete[] buffer;
  }

一目瞭然,C++的檔案讀取就幾個函式而已

更多相關資訊在這http://www.cplusplus.com/reference/fstream/fstream/