轉帖|使用教程|編輯:鮑佳佳|2020-11-23 09:44:52.240|閱讀 529 次
概述:CFile類提供了對文件進行打開,關閉,讀,寫,刪除,重命名以及獲取文件信息等文件操作的基本功能,足以處理任意類型的文件操作。本文 主要講解讀寫操作。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
CFile類提供了對文件進行打開,關閉,讀,寫,刪除,重命名以及獲取文件信息等文件操作的基本功能,足以處理任意類型的文件操作。
一個讀寫文件的例子:
文件I/O
雖然使用CArchive類內建的序列化功能是保存和加載持久性數據的便捷方式,但有時在程序中需要對文件處理過程擁有更多的控制權,對于這種文件輸入輸出(I/O)服務的需求,Windows提供了一系列相關的API函數,并由MFC將其封裝為CFile類,提供了對文件進行打開,關閉,讀,寫,刪除,重命名以及獲取文件信息等文件操作的基本功能,足以處理任意類型的文件操作。CFile類是MFC文件類的基類,支持無緩沖的二進制輸入輸出,也可以通過與CArchive類的配合使用而支持對MFC對象的帶緩沖的序列化。
CFile類包含有一個公有型數據成員m_hFile,該數據成員包含了同CFile類對象相關聯的文件句柄。如果沒有指定句柄,則該值為CFile::hFileNull。由于該數據成員所包含的意義取決于派生的類,因此一般并不建議使用m_hFile。
 通過CFile類來打開文件可以采取兩種方式:一種方式是先構造一個CFile類對象然后再調用成員函數Open()打開文件,另一種方式則直接使用CFile類的構造函數去打開一個文件。下面的語句分別演示了用這兩種方法打開磁盤文件“C:/TestFile.txt”的過程:
C++代碼
// 先構造一個實例,然后再打開文件 CFile file; file.Open(“C://TestFile.txt”, CFile::modeReadWrite); …… // 直接通過構造函數打開文件 CFile file(“C://TestFile.txt”, CFile::modeReadWrite);
其中參數CFile::modeReadWrite是打開文件的模式標志,CFile類中與之類似的標志還有十幾個,現集中列表如下:
文件模式標志 說明
CFile::modeCreate 創建方式打開文件,如文件已存在則將其長度設置為0
CFile::modeNoInherit 不允許繼承
CFile::modeNoTruncate 創建文件時如文件已存在不對其進行截斷
CFile::modeRead 只讀方式打開文件
CFile::modeReadWrite 讀寫方式打開文件
CFile::modeWrite 寫入方式打開文件
CFile::shareCompat 在使用過程中允許其他進程同時打開文件
 CFile::shareDenyNone 在使用過程中允許其他進程對文件進行讀寫
  CFile::shareDenyRead 在使用過程中不允許其他進程對文件進行讀取
 CFile::shareDenyWrite 在使用過程中不允許其他進程對文件進行寫入
  CFile::shareExclusive 取消對其他進程的所有訪問
CFile::typeBinary 設置文件為二進制模式
CFile::typeText 設置文件為文本模式
 這些標志可以通過“或”運算符而同時使用多個,并以此來滿足多種需求。例如,需要以讀寫方式打開文件,如果文件不存在就創建一個新的,如果文件已經存在則不將其文件長度截斷為0。為滿足此條件,可用CFile::modeCreate、CFile::modeReadWrite和CFile::modeNoTruncate等幾種文件模式標志來打開文件:
C++代碼
CFile file ("C://TestFile.txt", CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate);
在打開的文件不再使用時需要將其關閉,即可以用成員函數Close()關閉也可以通過CFile類的析構函數來完成。當采取后一種方式時,如果文件還沒有被關閉,析構函數將負責隱式調用Close()函數去關閉文件,這也表明創建在堆上的CFile類對象在超出范圍后將自動被關閉。由于調用了對象的析構函數,因此在文件被關閉的同時CFile對象也被銷毀,而采取Close()方式關閉文件后,CFile對象仍然存在。所以,在顯式調用Close()函數關閉一個文件后可以繼續用同一個CFile對象去打開其他的文件。
文件讀寫是最常用的文件操作方式,主要由CFile類成員函數Read()、Write()來實現。其函數原型分別為:
C++代碼
UINT Read( void* lpBuf, UINT nCount ); void Write( const void* lpBuf, UINT nCount );
參數lpBuf為指向存放數據的緩存的指針,nCount為要讀入或寫入的字節數,Read()返回的為實際讀取的字節數,該數值小于或等于nCount,如果小于nCount則說明已經讀到文件末尾,可以結束文件讀取,如繼續讀取,將返回0。因此通常可以將實際讀取字節數是否小于指定讀取的字節數或是否為0作為判斷文件讀取是否到達結尾的依據。下面這段代碼演示了對文件進行一次性寫入和循環多次讀取的處理過程:
C++代碼
// 創建、寫入方式打開文件 CFile file; file.Open("C://TestFile.txt", CFile::modeWrite | CFile::modeCreate); // 寫入文件 memset(WriteBuf, 'a', sizeof(WriteBuf)); file.Write(WriteBuf, sizeof(WriteBuf)); // 關閉文件 file.Close(); // 只讀方式打開文件 file.Open("C://TestFile.txt", CFile::modeRead); while (true) { // 讀取文件數據 int ret = file.Read(ReadBuf, 100); …… // 如果到達文件結尾則中止循環 if (ret < 100) break; } // 關閉文件 file.Close(); Write()和Read()函數執行完后將自動移動文件指針,因此不必再顯示調用Seek()函數去定位文件指針。包含有文件定位函數的完整代碼如下所示: C++代碼 // 創建、寫入方式打開文件 CFile file; file.Open("C://TestFile.txt", CFile::modeWrite | CFile::modeCreate); // 寫入文件 memset(WriteBuf, 'a', sizeof(WriteBuf)); file.SeekToBegin(); file.Write(WriteBuf, sizeof(WriteBuf)); // 關閉文件 file.Close(); // 只讀方式打開文件 file.Open("C://TestFile.txt", CFile::modeRead); while (true) { // 文件指針 static int position = 0; // 移動文件指針 file.Seek(position, CFile::begin); // 讀取文件數據 int ret = file.Read(ReadBuf, 100); position += ret; …… // 如果到達文件結尾則中止循環 if (ret < 100) break; } // 關閉文件 file.Close();
補充:
使用CFile類對文件進行按結構讀取,如:
C++代碼
CFile fileRead,fileWrite; fileRead.Open(_T("E://a.dat"),CFile::modeRead);//這里使用宏_T fileWrite.Open(_T("E://backup.txt"),CFile::modeCreate | CFile::modeWrite); VIDEOHEADER *videoheader=new VIDEOHEADER(); fileRead.Read(videoheader,sizeof(VIDEOHEADER)); char buf[sizeof(VIDEOHEADER)*8]; sprintf(buf,"videoheader.cCommandID:%s ,videoheader->cCommandID); //通過sprintf對我們需要寫入文件中的數據進行格式化,這樣在文件中存儲的數據就是以這里定義的格式顯示的。 fileWrite.Write(buf,strlen(buf));
MFC擴展類庫
在平時練習的時候我們可以自己手動進行,但是一旦接受一些項目,應用程序開發等,對界面的要求就會高出許多。這時候就有必要借助這些“半成品”實現界面美化提升效率。這里簡單介紹一下,具體可點進去查看每個的詳情以及教程,案例!
Toolkit Pro:
Codejock軟件公司的Xtreme Toolkit Pro是屢獲殊榮的VC界面庫,是MFC開發中最全面界面控件套包,它提供了Windows開發所需要的11種主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。(點這下載)
BCGControlBar
BCGControlBar ("Business Components Gallery ControlBar")是MFC擴展庫,使您可以創建具有完全自定義選項(功能區、可自定義工具欄、菜單等)以及一組專業設計的豐富Microsoft Office和Microsoft Visual Studio的應用程序 GUI控件,例如圖表、日歷、網格、編輯器、甘特圖和許多其他控件。
BCGControlBar庫擁有500多個經過全面設計、測試和充分記錄的MFC擴展類。可以輕松地集成到你的應用程序中,并為你節省數百個開發和調試時間。(點這下載)
QtitanRibbon:
QtitanRibbon是一款遵循Microsoft Ribbon UI Paradigm for Qt技術的Ribbon UI組件,QtitanRibbon致力于為Windows、Linux和Mac OS X提供功能完整的Ribbon組件。
本文轉載自:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn