CFile的使用說明

在程序中碰到這個一段代碼:

講的是CFILE類的文件操作,故參考MSDN系統學習一下(翻譯了一下英文):

CFile file;
CFileException fe;

//打開文件
if(!file.Open(lpszPathName,CFile::modeRead|CFile::shareDenyWrite,&fe))
{
   ReportSaveLoadException(lpszPathName,&fe,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);
  
   return FALSE;
}

CFIIE類是MFC的文件類的基類,它直接提供無緩衝的二進制磁盤I/O設備,並且通過它的派生類可以提供對text文件和內存文件的存取。CFILE與CArchive類一起提供對MFC序列化的支持。

CFILE類和它的派生類之間的等級關係,允許你的程序通過多態的CFILE界面對所有文件類進行操作。比如內存文件,或者磁盤文件以及類似的。

CFILE和它的派生類用於執行一般的磁盤I/O操作。而OFSTREAM或者其它的微軟 iostream類則是用於把格式化text輸出到磁盤文件上去。

通常,CFILE類的構造過程中會自動打開磁盤文件,在析構函數中則會自動關閉文件。你可以使用靜態成員函數來詢問文件的狀態而不用打開文件。

使用CFILE類必須包含 #include <afx.h>

cfile:: open

virtual BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL );

返回值:成功爲非0,否則爲0,僅當返回值爲0時pError參數纔有意義

參數:

lpszFileName   需要打開文件的路徑字符串,這個路徑可以是相對路徑也可以是絕對路徑,或者是網絡名字(UNC)

nOpenFlags   一個UINT定義文件的存取共享模式。它指定文件打開時可以採取的操作。你可以使用”|"號來組合多個選項。文件的一個存取權限和一個共享選項是必須要指定的。而modeCreate 和modeNoInherit是可選的。

具體如下:

  • CFile::modeCreate    讓構造器創建一個新文件,如果那個文件已經存在,把那個文件的長度重設爲
  • CFile::modeNoTruncate    可以同modeCreate. 一起用,如果要創建的文件已經存在,並不把它長度設置爲0,因而這個文件獲取或者作爲一個新建文件或者作爲一個已存在文件打開。這個功能往往很好用,比如說,當你需要打開一個設置文件,但是你並不清楚這個文件是否已經存在。
  • CFile::modeRead 打開文件僅僅供讀
  • CFile::modeReadWrite    打開文件供讀寫
  • CFile::modeWrite   打開文件只供寫
  • CFile::modeNoInherit    阻止這個文件被子進程繼承
  • CFile::shareDenyNone 打開這個文件同時允許其它進程讀寫這個文件。如果文件被其它進程以incompatibility模式打開,這是create操作會失敗。
  • CFile::shareDenyRead   打開文件拒絕其它任何進程讀這個文件。如果文件被其它進程用compatibility模式或者是讀方式打開,create操作失敗。
  • CFile::shareDenyWrite   打開文件拒絕其它任何進程寫這個文件。如果文件被其它進程用compatibility模式或者是寫方式打開,create操作失敗。
  • CFile::shareExclusive   以獨佔方式打開這個文件,不允許其它進程讀寫這個文件。 Construction fails if the file has been opened in any other mode for read or write access, even by the current process.
  • CFile::shareCompat    這個標誌在32位的MFC中無效。 This flag maps to CFile::shareExclusive when used in CFile::Open.
  • CFile::typeText   設置成對回車換行對有特殊處理的文本模式(僅用在派生類中)
  • CFile::typeBinary    設置二進制模式(僅用在派生類中)

     

    pError-------一個指向一個已經存在的file-exception類的指針,它會接收文件失敗操作的具體狀態。

    註明:

    OPEN默認是用在CFILE的構造器中,這兩個函數提供了一個對文件的安全訪問方式,即使發生了錯誤也會正確的回報錯誤。

  • 以下------CSDN轉載

在VC中,大多數情況對文件的操作都使用系統提供的   API   函數,但有的函數我們不是很熟悉,以下提供一些文件操作   API   函數介紹:  
   
    一般文件操作   API  
   
  CreateFile  
  打開文件  
  要對文件進行讀寫等操作,首先必須獲得文件句柄,通過該函數可以獲得文件句柄,該函數是通向文件世界的大門。  
   
  ReadFile  
  從文件中讀取字節信息。    
  在打開文件獲得了文件句柄之後,則可以通過該函數讀取數據。  
   
  WriteFile    
  向文件寫入字節信息。    
  同樣可以將文件句柄傳給該函數,從而實現對文件數據的寫入。  
   
  CloseHandle    
  關閉文件句柄。    
  打開門之後,自然要記得關上。  
   
  GetFileTime    
  獲取文件時間。    
  有三個文件時間可供獲取:創建時間、最後訪問時間、最後寫時間。    
  該函數同樣需要文件句柄作爲入口參數。  
   
  GetFileSize    
  獲取文件大小。    
  由於文件大小可以高達上數G(1G需要30位),因此一個32位的雙字節類型無法對其精確表達,因此返回碼錶示低32位,還有一個出口參數可以傳出高32位。    
  該函數同樣需要文件句柄作爲入口參數。  
   
  GetFileAttributes    
  獲取文件屬性。    
  可以獲取文件的存檔、只讀、系統、隱藏等屬性。    
  該函數只需一個文件路徑作爲參數。  
   
  SetFileAttributes    
  設置文件屬性。    
  能獲取,自然也應該能設置。    
  可以設置文件的存檔、只讀、系統、隱藏等屬性。    
  該函數只需一個文件路徑作爲參數。  
   
  GetFileInformationByHandle    
  獲取所有文件信息    
  該函數能夠獲取上面所有函數所能夠獲取的信息,如大小、屬性等,同時還包括一些其他地方無法獲取的信息,比如:文件卷標、索引和鏈接信息。    
  該函數需要文件句柄作爲入口參數。  
   
  GetFullPathName    
  獲取文件路徑,該函數獲取文件的完整路徑名。  
  需要提醒的是:只有當該文件在當前目錄下,結果才正確。如果要得到真正的路徑。應該用GetModuleFileName函數。  
   
  CopyFile    
  複製文件    
  注意:只能複製文件,而不能複製目錄  
   
  MoveFileEx    
  移動文件    
  既可以移動文件,也可以移動目錄,但不能跨越盤符。(Window2000下設置移動標誌可以實現跨越盤符操作)  
   
  DeleteFile    
  刪除文件  
   
  GetTempPath    
  獲取Windows臨時目錄路徑  
   
  GetTempFileName    
  在Windows臨時目錄路徑下創建一個唯一的臨時文件  
   
  SetFilePoint    
  移動文件指針。    
  該函數用於對文件進行高級讀寫操作時。  
   
   
    文件的鎖定和解鎖  
   
  LockFile    
  UnlockFile    
  LockFileEx    
  UnlockFileEx    
   
  以上四個函數用於對文件進行鎖定和解鎖。這樣可以實現文件的異步操作。可同時對文件的不同部分進行各自的操作。  
   
    文件的壓縮和解壓縮  
   
  LZOpenFile    
  打開壓縮文件以讀取  
   
  LZSeek    
  查找壓縮文件中的一個位置  
   
  LZRead    
  讀一個壓縮文件  
   
  LZClose    
  關閉一個壓縮文件  
   
  LZCopy    
  複製壓縮文件並在處理過程中展開  
   
  GetExpandedName    
  從壓縮文件中返回文件名稱。  
   
  以上六個函數爲32位   API   中的一個小擴展庫,文件壓縮擴展庫中的函數。文件壓縮可以用命令   compress   創建。  
   
   
    文件內核對象  
   
          32位   API   提供一個稱爲文件映像的特性,它允許將文件直接映射爲一個應用的虛擬內存空間,這一技術可用於簡化和加速文件訪問。  
   
  CreateFileMapping    
  創建和命名映射  
   
  MapViewOfFile    
  把文件映射裝載如內存  
   
  UnmapViewOfFile    
  釋放視圖並把變化寫回文件  
   
  FlushViewOfFile    
  將視圖的變化刷新寫入磁盤  
   
  希望通過以上幾個常用的   API   函數,能快速的提高文件操作過程函數的編寫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章