【C++】標準檔案的輸入輸出!!!

doctor_xiong發表於2018-02-08

在C++裡面的IO都是以流的形式存在的,所以在對檔案進行操作的時候也是以流的形式操作的。
主要的流:ifstream、ofstream、fstream,都包含於fstream標頭檔案裡面。
ifstream:從記憶體將檔案資料讀在硬碟
ofstream:從硬碟將檔案資料讀到記憶體
fstream:可以對開啟的檔案進行讀寫操作

ofstream的繼承關係
這裡寫圖片描述
ifstream的繼承關係
這裡寫圖片描述

開啟檔案
開啟檔案是通過open函式實現的,函式原型void open ( const char * filename, ios_base::openmode mode = ios_base::out );

引數:
filename:需要開啟檔案的名稱
mode:開啟檔案的方式

常用的mode:
ios::app:以追加的形式開啟
ios::ate:開啟檔案後定位帶檔案尾
ios::binary:以二進位制的形式開啟檔案
ios::in:以輸入的形式開啟檔案
ios::out:以輸出的形式開啟檔案
ios::nocreate:不建立新的檔案,即如果開啟的檔案不存在時候就會報錯
ios::noreplace:不替換檔案,即只能開啟已存在的檔案,如果檔案不存在就會報錯
ios::trunc:如果開啟的檔案存在,就將檔案的長度階段為0

注:這些mode可以並聯使用,如:ios::out | ios::trunc

關閉檔案

關閉檔案使用的函式是close,函式原型是:void close ( );
當開啟的檔案使用結束後,需要將開啟的檔案關閉。使用close函式可以將開啟的檔案以及相關聯的檔案關閉。

檔案的讀寫

在需要將將資料輸入到檔案裡面去的時候,可以使用<<來操作,當需要將檔案裡面的資料輸入到輸出流裡面的時候可以使用getline函式實現。
例如:


#include<iostream>
using namespace std;
#include<fstream>

int main(){
    ofstream out("test.txt");
    out<<"hello world"<<endl;
    ifstream in;
    in.open("test.txt");
    char buf[1024];
    while(!in.eof()){
        in.getline(buf,100);
        cout<<buf<<endl;
    }
}

注:狀態標誌,eof表示是否到達檔案末尾

二進位制的檔案讀寫
寫操作採用write函式;函式原型:ostream& write ( const char* s , streamsize n );
這裡面的write函式是將s裡面的資料寫n個到輸出流物件開啟的檔案裡面去。
讀操作採用的是read函式,函式原型:istream& read ( char* s, streamsize n );
這裡的read函式是將輸出流物件開啟的檔案裡面的內容寫n個字元到s裡面去。

檔案定位
檔案定位使用的函式是seekg()和seekp();
seekp的函式原型:ostream& seekp ( streampos pos );
或者ostream& seekp ( streamoff off, ios_base::seekdir dir );

seekg的函式原型:istream& seekg ( streampos pos );
或者istream& seekg ( streamoff off, ios_base::seekdir dir );

off主要偏移量:
ios::beg:檔案開頭
ios::cur:檔案的當前位置
ios::end:檔案結尾

相關文章