程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 解讀VC++編程中的文件操作API和CFile類

解讀VC++編程中的文件操作API和CFile類

編輯:vc教程

  在VC編程中,操作文件的方法主要有兩種:利用API函數和MFC的CFile類。微軟在其中封裝了文件的一般操作,下面我就介紹一下如何利用這兩種方法實現文件操作。

  1.創建或打開一個文件

  API函數CreateFile可打開和創建文件、管道、郵槽、通信服務、設備以及控制台,但是在此時只是介紹用這個函數怎麼實現創建和打開一個文件。

HANDLE CreateFile(
 LPCTSTR lpFileName, // 要打開的文件名
 DWord dwDesiredAccess, // 文件的操作屬性
 DWord dwShareMode, // 文件共享屬性
 LPSECURITY_ATTRIBUTES lpSecurityAttributes,// 文件安全特性
 DWord dwCreationDisposition, //文件操作
 DWord dwFlagsAndAttributes, // 文件屬性
 HANDLE hTemplateFile // 如果不為零,則指定一個文件句柄。新文件將從這個文件中復制擴展屬性
);

  文件的操作屬性:如果為零,表示只允許獲取與一個設備有關的信息,GENERIC_READ 表示允許對設備進行讀訪問;如果為 GENERIC_WRITE 表示允許對設備進行寫訪問(可組合使用);

  文件的共享屬性:零表示不共享; FILE_SHARE_READ 或 FILE_SHARE_WRITE 表示允許對文件進行讀/寫共享訪問;

  文件的操作有:

  ·CREATE_NEW:創建文件;如文件存在則會出錯
  ·CREATE_ALWAYS:創建文件,會改寫前一個文件
  ·OPEN_EXISTING:文件必須已經存在。由設備提出要求
  ·OPEN_ALWAYS:如文件不存在則創建它
  ·TRUNCATE_EXISTING:將現有文件縮短為零長度

  文件屬性有:

  ·FILE_ATTRIBUTE_ARCHIVE:標記歸檔屬性
  ·FILE_ATTRIBUTE_COMPRESSED:將文件標記為已壓縮,或者標記為文件在目錄中的默認壓縮方式
  ·FILE_ATTRIBUTE_NORMAL:默認屬性
  ·FILE_ATTRIBUTE_HIDDEN:隱藏文件或目錄
  ·FILE_ATTRIBUTE_READONLY:文件為只讀
  ·FILE_ATTRIBUTE_SYSTEM:文件為系統文件
  ·FILE_FLAG_WRITE_THROUGH:操作系統不得推遲對文件的寫操作
  ·FILE_FLAG_OVERLAPPED:允許對文件進行重疊操作
  ·FILE_FLAG_NO_BUFFERING:禁止對文件進行緩沖處理。文件只能寫入磁盤卷的扇區塊
  ·FILE_FLAG_RANDOM_Access:針對隨機訪問對文件緩沖進行優化
  ·FILE_FLAG_SEQUENTIAL_SCAN:針對連續訪問對文件緩沖進行優化
  ·FILE_FLAG_DELETE_ON_CLOSE:關閉了上一次打開的句柄後,將文件刪除。特別適合臨時文件

  可以組合的屬性有:FILE_FLAG_WRITE_THROUGH,FILE_FLAG_OVERLAPPED,FILE_FLAG_NO_BUFFERING,FILE_FLAG_RANDOM_Access,FILE_FLAG_SEQUENTIAL_SCAN,FILE_FLAG_DELETE_ON_CLOSE,FILE_FLAG_BACKUP_SEMANTICS,FILE_FLAG_POSIX_SEMANTICS,FILE_FLAG_OPEN_REPARSE_POINT,FILE_FLAG_OPEN_NO_RECALL

  如果成功返回一個打開文件得句柄,如果調用函數之前文件存在,文件操作屬性為:CREATE_ALWAYS 或 OPEN_ALWAYS,使用GetLastError函數返回的是ERROR_ALREADY_EXISTS(包括函數操作成功),如果之前函數不存在,則返回0。使用失敗返回INVALID_HANDLE_VALUE,要取得更多的信息,使用GetLastError函數。

  文件關閉用:

BOOL CloseHandle(HANDLE hObject // handle to object to close);

  例子1、在當前目錄下面創建一個文件:

HANDLE handle;
D

[1] [2] [3] [4] [5] [6] [7] 下一頁

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved