MFC CFile 讀寫檔案

2021-10-11 09:06:52 字數 3453 閱讀 7979

cfile類

檔案的讀寫,檔案中的資料讀取、資料寫入與檔案指標的操作都是以位元組為單位。

資料的讀取和寫入是從檔案指標的位置開始的(當開啟乙個檔案的時候,檔案指標預設在檔案的開頭)。

cfile中最重要的乙個成員函式open的使用

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

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

使用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)檔案操作

本文將對visual c 中有關檔案操作進行全面的介紹,並對在檔案操作中經常遇到的一些疑難問題進行詳細的分析。1 檔案的查詢 當對乙個檔案操作時,如果不知道該檔案是否存在,就要首先進行查詢。mfc中有乙個專門用來進行檔案查詢的類cfilefind,使用它可以方便快捷地進行檔案的查詢。下面這段 演示了...

c 檔案讀寫 文字讀寫

include int main else return 0 格式 intfscanf file stream,constchar format,返回值 如果成功,該函式返回成功匹配和賦值的個數。如果到達檔案末尾或發生讀錯誤,則返回 eof 引數1 file stream 檔案指標 引數2 cons...

mysql讀寫檔案函式 讀寫檔案 檔案方法 函式

讀寫檔案 全域性申明 import codecs encodeing utf 8 開啟檔案的模式有 r,唯讀模式 預設 w,只寫模式。不可讀 不存在則建立 存在則刪除內容 a,追加模式。可讀 不存在則建立 存在則只追加內容 表示可以同時讀寫某個檔案 r 可讀寫檔案。可讀 可寫 可追加 w 寫讀 a ...