VC++ 開發者面臨四種檔案 I/O 路徑,理解其差異才能做出正確選擇:
fopen/fread...)fprintf/fscanf)。FILE*,不可 與 Win32 控制代碼混用。_lopen/_lread...)CreateFile/ReadFile...)HANDLE,與 CRT FILE* 不相容。需轉換可用 _open_osfhandle → _fdopen。CreateFile 同時用於開啟/建立檔案、裝置、管道,旗標組合極其靈活(FILE_FLAG_OVERLAPPED、FILE_FLAG_SEQUENTIAL_SCAN 等)。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 物件非安全,需自行同步或各開各的控制代碼。CFile::typeBinary 並使用 64 位元定位 ULONGLONG 版 Seek/GetPosition(MFC 7.0+ 支援)。