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 以下 為自動建立序號時使用,若你的資料來源本...