首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

MFC 檔案操作完全指南:CFile、CStdioFile 與 Win32 API 選擇策略

     編輯:關於C語言

四種檔案操作方式對比

VC++ 開發者面臨四種檔案 I/O 路徑,理解其差異才能做出正確選擇:

1. C 執行期庫(fopen/fread...)

  • 標準 C、跨平台、緩衝 I/O、格式化輸入輸出(fprintf/fscanf)。
  • 返回 FILE*,不可 與 Win32 控制代碼混用。

2. Win16 遺留 API(_lopen/_lread...)

  • 僅為 16 位元相容保留,Win32 下直接對應 Win32 API,新程式勿用。

3. Win32 API(CreateFile/ReadFile...)

  • 最底層、功能最完整:支援非同步 I/O、記憶體對應檔案、管道、郵件槽、裝置控制等。
  • 返回 HANDLE,與 CRT FILE* 不相容。需轉換可用 _open_osfhandle → _fdopen。
  • CreateFile 同時用於開啟/建立檔案、裝置、管道,旗標組合極其靈活(FILE_FLAG_OVERLAPPED、FILE_FLAG_SEQUENTIAL_SCAN 等)。

4. MFC 封裝類別(CFile、CStdioFile、CMemFile、CSharedFile)

核心優勢: 例外處理(CFileException)、序列化支援、自動資源管理(RAII)。

  • CFile:封裝 Win32 API,無緩衝,支援二進位隨機存取。
  • CStdioFile:繼承 CFile,內建文字緩衝,提供 ReadString/WriteString,處理換行轉換(\n↔\r\n)。
  • CMemFile:記憶體當檔案,極速暫存。
  • CSharedFile:共享記憶體檔案,支援 OLE 資料傳輸、剪貼板。

實務決策樹

需要跨平台/標準 C?  →  CRT (fopen)
需要非同步/記憶體對應/裝置控制/管道?  →  Win32 API (CreateFile)
一般 MFC 應用程式二進位檔案?  →  CFile
一般 MFC 應用程式文字檔案?  →  CStdioFile
高速暫存/序列化到記憶體?  →  CMemFile
OLE/剪貼板/共享記憶體資料傳輸?  →  CSharedFile

關鍵提醒

  • CFile::Open 失敗拋出 CFileException*,必須 Catch 並 Delete() 例外物件。
  • 多執行緒存取同一 CFile 物件非安全,需自行同步或各開各的控制代碼。
  • 大檔案(>4GB)需指定 CFile::typeBinary 並使用 64 位元定位 ULONGLONG 版 Seek/GetPosition(MFC 7.0+ 支援)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved