文件的使用步驟如下:
1.說明一個文件流對象,這又被稱為內部文件:
ifstream ifile; //只輸入用
ofstream ofile; //只輸出用
fstream iofile; //既輸入又輸出用
2.使用文件流對象的成員函數打開一個磁盤文件。這樣文件流對象和磁盤文件名之間建立聯系。文件流中說明了三個打開文件的成員函數。
void ifstream::open(const char*, int=ios::in, int=filebuf::openprot);
void ofstream::open(const char*, int=ios::out, int=filebuf::openport);
void fstream::open(const char*, int, int=filebuf::openport);
第一個參數為要打開的磁盤文件名。第二個參數為打開方式,有輸入(in),輸出(out)等,打開方式在ios基類中定義為枚舉類型。第三個參數為指定打開文件的保護方式,一般取缺省。
所以第二部可如下進行:
iofile.open("TEST.txt", ios::in | ios::out);
打開文件也應該判斷是否成功,若成功,文件流對象值為非零值,不成功則為0(NULL),文件流對象值物理上就是指它的地址。
因此打開一個文件完整的程序為:
fstream iofile("TEST.txt", ios::in | ios::out);
if(!iofile)
{
cout<<"打開文件失敗!"<<"TEST.txt"<<endl;
exit(1);//失敗退回操作系統
}
3.使用提取和插入運算符對文件進行讀寫操作,或者使用成員函數進行讀寫。
4.關閉文件。三個文件流類各有一個關閉文件的成員函數。
void ifstrean::close();
void ofstream::close();
void fstream::close();
文件打開過程示例代碼如下
#include<iostream>
#include<fstream>
using namespace std;
void main()
{
int ar[] = {65,66,67,68,69,1134688,71,70,73,74}, br[10];
ofstream ofile;//①
ofile.open("TEST.txt", ios::out);//②
if(!ofile)
{
cerr<<"Open File Fail."<<endl;
exit(1);
}
for(int t=0; t<sizeof(ar)/sizeof(int); ++t)//③
ofile<<ar[t]<<" ";//向文件內寫入
ofile.close();//④
ifstream ifile;
ifile.open("TEST.txt", ios::in);
if(!ifile)
{
cerr<<"Open File Fail."<<endl;
exit(1);
}
for(int t=0; t<10; ++t)
ifile>>br[t];//從文件內讀出並寫入br中
ifile.close();
}
查看是否生成文件TEST.txt和br[10]內是否有數據
文件打開方式是在ios類中定義的,公有枚舉成員:
使用方式與格式控制符相同。
在C++中可以又程序移動文件指針,從而實現文件的隨機訪問,即可讀寫流中任意一段內容。一般文件很難准確定位,所以隨機訪問多用於二進制文件。
在ios類中說明了一個公有枚舉類型:
enum seek_dir { beg=0,//文件開頭 cur=1,//文件指針的當前位置 end=2//文件結尾 }
#include<iostream> #include<fstream> using namespace std; void main() { int ar[] = {65,66,67,68,69,70,71,70,73,74}, br[10], pos,value; ofstream ofile; ofile.open("TEST.txt", ios::out); if(!ofile) { cerr<<"Open File Fail."<<endl; exit(1); } for(int i=0; i<sizeof(ar)/sizeof(int); ++i) ofile<<ar[i]<<" "; ofile.close(); ifstream ifile; ifile.open("TEST.txt", ios::in); if(!ifile) { cerr<<"Open File Fail."<<endl; exit(1); } while(1) { cout<<"input pos = "; cin>>pos; ifile.seekg(3*pos, ios::beg); ifile>>value; cout<<value<<endl; } ifile.close(); }
運行結果