VC++中對檔案的寫入和讀取
VC++中對檔案的寫入和讀取
本文介紹兩種方法對檔案進行讀取和寫入操作:1、採用fstream類;2、採用CStdioFile類。
CStdioFile繼承自CFile,一個CStdioFile物件代表一個用執行時函式fopen 開啟的C 執行時流式檔案。
C++中的fstream類,所有的I/O都以這個“流”類為基礎的,包括我們要認識的檔案I/O。stream類有兩個重要的運算子:插入器(<<)和析取器(>>)。插入器(<<)即向流輸出資料,析取器(>>)即從流中輸入資料。在C++中,對檔案的操作是通過stream的子類fstream(file
stream)
1、檔案的寫入
往檔案中寫入資料的操作較為簡單,這裡以fstream類中往檔案寫入資料為例,介紹VC++中對檔案的寫入方法。對於用CstdioFile類對檔案進行寫入操作可參看相關資料。下面給出採用fstream類對檔案進行寫入操作的程式碼:
#include <fstream.h>
ofstream of1;//建立物件
of1.open("資料記錄.txt",ios::out,filebuf::openprot);//
int i;//定義一個整型變數
float f; //定義一個單精度浮點型變數
double d; //定義一個雙精度浮點型變數
i=123;//賦值
f=3.478f; //賦值
d=859.653; //賦值
of1<<i<<’\t’<<f<<’\t’<<d;//寫入資料
of1.close();//關閉檔案
執行後開啟“資料記錄.txt”檔案,內容見圖1,變數i,f,d已寫入檔案中。
圖1 開啟後文件的內容
2、檔案的讀取
2.1 採用fstream類
採用fstream類中的析取器(>>)從第一節生成的檔案“資料記錄.txt
ifstream if1; //建立物件
if1.open("資料記錄.txt",ios::in,filebuf::openprot);//開啟檔案
int i; //定義一個整型變數
float f; //定義一個單精度浮點型變數
double d; //定義一個雙精度浮點型變數
CString str; //定義一個Cstring類
while(!if1.eof())
{
if1>>i>>f>>d;//讀取資料
str.Format("%d %f %lf",i,f,d);
MessageBox(str);
}
if1.close();//關閉檔案
執行結果見圖2。
圖2 讀取檔案的結果
值得注意的是,ifstream類中的析取器(>>)只適用天資料與資料之間是空隔(’ ’)或製表符(’\t’)分隔的情況,對於其他的分隔符,如’,’, ’;’等,若仍按上述方式讀取,則會發生錯誤。針對這個問題,本文介紹第二種資料讀取的方法。
2.2 採用CStdioFile類
採用CStdioFile類從第一節生成的檔案“資料記錄.txt”中讀取資料,實現的程式碼如下:
CString string,str;//定義兩個Cstring類
int i; //定義一個整型變數
float f; //定義一個單精度浮點型變數
double d; //定義一個雙精度浮點型變數
CStdioFile file("資料記錄.txt",CFile::modeRead);//建立CstdioFile物件
while(file.ReadString(string))//讀取出一行中的所有字元
{
string.Replace(',',' '); //將字元中的逗號’,’用空格’ ’替換掉
string.Replace(';',' ');//將字元中的分號’;’用空格’ ’替換掉
sscanf(string,"%d%f%lf",&i,&f,&d);//提取資料
str.Format("%d %f %lf",i,f,d);
MessageBox(str);
}
file.Close();//關閉檔案
程式執行的結果同圖2。
程式碼段string.Replace(',',' ')及string.Replace(';',' ')將讀取的字串中的逗號’,’及分號’;’用空格’ ’替換掉,從而為後面提取資料打下基礎。因此採用CStdioFile類從檔案中讀取資料比採用fstream類更為靈活。