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

來源:互聯網
上載者:User

標籤:

本文轉自:http://blog.csdn.net/fanghb_1984/article/details/7425705

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

CStdioFile繼承自CFile,一個CStdioFile對象代表一個用運行時函數fopen 開啟的C 運行時流式檔案。

C++中的fstream類,所有的I/O都以這個“流”類為基礎的,包括我們要認識的檔案I/O。stream類有兩個重要的運算子:插入器(<<)和析取器(>>)。插入器(<<)即向流輸出資料,析取器(>>)即從流中輸入資料。在C++中,對檔案的操作是通過stream的子類fstream(file stream)來實現的,所以,要用這種方式操作檔案,就必須加入標頭檔fstream.h。fstream類包括向“流”輸出資料的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,變數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類更為靈活。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.