【C++】標準檔案的輸入輸出!!!
在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:檔案結尾