MFC中用CFile讀取和寫入檔案

2021-07-11 04:43:10 字數 3500 閱讀 1581

mfc提供了cfile類方便檔案的讀寫,首先要知道,檔案的資料讀取、資料寫入與檔案指標的操作都是以位元組為單位的,資料的讀取和寫入都是從檔案指標的位置開始的,當開啟乙個檔案的時候,檔案指標總是在檔案的開頭。常規方法如下:

cfile file;

file.open( lpctstr lpszfilename, uint nopenflags, cfileexception* perror = null );

//pszfilename是檔名,可包含檔案路徑,若只有檔名,則預設路徑為工程路徑,nopenflags是檔案開啟模式,perror是開啟失敗時用來接收失敗資訊,一般設定為null。

nopenflags的常用模式有:

表1-1  cfile檔案開啟方式 標誌

含義cfile::modecreate

建立新檔案,如果檔案已存在,則將其長度變成0

cfile::modenotruncate

與modecreate組合使用,如果檔案已存在,則不會將其長度變成0

cfile::moderead

以唯讀方式開啟檔案

cfile::modereadwrite

以讀寫方式開啟檔案

cfile::modewrite

以只寫方式開啟檔案

cfile::modenoinherit

組織該檔案被子項繼承

cfile::sharedenynone

以共享模式開啟檔案,不會禁止其他程序對檔案的讀寫

cfile::sharedenyread

禁止其他程序對檔案的讀操作

cfile::sharedenywrite

禁止其他程序對檔案的寫操作

cfile::shareexclusive

以獨佔模式開啟檔案,禁止其他程序對檔案的讀寫

cfile::typetext

以文字方式開啟檔案

cfile::typebinary

以二進位制方式開啟檔案

cfile::modecreate 

若開啟檔案不存在,則建立乙個新檔案,如果該檔案存在,則清空它的資料。

cfile::modenotruncate 

與cfile::modecreate 組合使用。如果檔案不存在,則建立乙個新檔案,如果檔案存在,則保留他原本的資料。

cfile::moderead 

開啟檔案用於讀取資料。

cfile::modewrite 

開啟檔案用於寫入資料。

cfile::modereadwrite 

開啟檔案用於讀取和寫入資料。

cfile::typebinary 

使用二進位制檔案模式。此模式僅用於cfile的派生類。

cfile::typetext 

使用文字檔案模式。此模式僅用於cfile的派生類。

cfile預設使用二進位制模式讀寫檔案,cfile無法使用文字模式讀寫檔案。

cfile提供了一些常用的操作函式,如表1-2所示。

表1-2  cfile操作函式 函式

含義open

開啟檔案

close

關閉檔案

flush

重新整理待寫的資料

read

從當前位置讀取資料

write

向當前位置寫入資料

getlength

獲取檔案的大小

seek

定位檔案指標至指定位置

seektobegin

定位檔案指標至檔案頭

seektoend

定位檔案指標至檔案尾

getfilename

獲取檔名,如:「notepad.exe」

getfilepath

獲取檔案路徑,如:「c:\windows \notepad.exe」

getfiletitle

獲取檔案標題,如:「notepad」

getposition

獲取當前檔案指標

getstatus

獲取當前檔案的狀態,返回乙個cfilestatus

#remove

靜態方法,刪除指定檔案

#rename

靜態方法,重新命名指定檔案

注意最後兩個靜態函式,其實它們封裝了windows api中關於檔案管理的函式。

使用cfile操作檔案的流程如下:

構造乙個cfile物件。

呼叫cfile::open()函式建立、開啟指定的檔案。

呼叫cfile::read()和cfile::write ()進行檔案操作。

呼叫cfile::close()關閉檔案控制代碼。

檔案指標的位置設定可以使用:

seek( long loff, uint nfrom ) 

把檔案指標移動到指定位置

loff :是指標偏移位元組數,若向後偏移則為正數,若向前偏移,則為負數。

nfrom :msdn上有三種取值:

cfile::begin  從檔案開頭開始算起,loff為正數;

cfile::current  當前位置開始算起;

cfile::end 

從檔案結尾開始算起,loff為負數;

seektobegin( ) 

把檔案指標移到檔案開頭

seektoend( ) 

把檔案指標移到檔案末尾

getposition( ) 

返回當前檔案指標的位置

獲取檔案的位元組數可用 getlength( )  此函式的返回值為dword,但可直接用來分配陣列元素數目,例如:

dowrd len=file.getlength();

char *pbuf=new char[len+1] 

/ int *pbuf=new int[len/4]

char佔乙個位元組,int佔四個位元組。

寫入檔案:

cfile file;

file.open("e:\\vc\\1.txt",cfile::modecreate|cfile::modewrite|cfile::modenotruncate,null);

file.write("helloworld",strlen("helloworld")); 

//write( const void* lpbuf, uint ncount )  lpbuf是寫入資料的buf指標,ncount是buf裡需要寫入檔案的位元組數

file.close( );

讀取檔案:

cfile file;

file.open("e:\\vc\\1.txt",cfile::moderead,null); 

dword len=file.getlength( );

char buf[len+1];

buf[len]=0;  //0終止字串,用於輸出。

file.read(buf,len); 

//read( void* lpbuf, uint ncount ) lpbuf是用於接收讀取到的資料的buf指標ncount是從檔案讀取的位元組數

messagebox(buf);

MFC中利用CFile類讀取檔案內容

mfc讀取檔案內容有多種方法,關鍵是看你怎麼用。下面介紹一種用cfile類讀取檔案的方法.一。首先新建乙個dialog型的mfc exe 工程。在對話方塊中新建乙個類,類名為cdlgcfile.並在介面上分別新增2個文字框 乙個名稱為filecontent,用來顯示檔案內容 另乙個名稱為 m edi...

MFC下用CFile類進行檔案的寫入

因為cfile類預設是英文寫入檔案,所以如果不設定的話是不會在檔案中寫入中文的。需要進行以下設定 需加標頭檔案 include 確保能讀寫中文 tchar old locale tcsdup tsetlocale lc ctype,null tsetlocale lc ctype,t chs 在cf...

xml讀取和寫入

1 需要的命名空間 using system.collections.generic using system.io using system.text using system.xml 3 寫入後的xml檔案樣式 1神州俠侶 5045.55 tiger 以下 為自動建立序號時使用,若你的資料來源本...