1. 程式人生 > >VC++中對檔案的寫入和讀取

VC++中對檔案的寫入和讀取

VC++中對檔案的寫入和讀取

本文介紹兩種方法對檔案進行讀取和寫入操作:1、採用fstream類;2、採用CStdioFile類。

CStdioFile繼承自CFile,一個CStdioFile物件代表一個用執行時函式fopen 開啟的C 執行時流式檔案。

C++中的fstream類,所有的I/O都以這個類為基礎的,包括我們要認識的檔案I/Ostream類有兩個重要的運算子:插入器(<<)和析取器(>>)。插入器(<<)即向流輸出資料,析取器(>>)即從流中輸入資料。在C++中,對檔案的操作是通過stream的子類fstream(file stream)

來實現的,所以,要用這種方式操作檔案,就必須加入標頭檔案fstream.hfstream類包括向“流”輸出資料的ofstream類和從“流”中輸出資料的ifstream類。

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,變數ifd已寫入檔案中。

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類更為靈活。