C/C++–IO(3)

來源:互聯網
上載者:User

基於WINAPI的檔案操作
  WINAPI提供了兩種檔案操作函數,一組是為了和16位程式相容,這種函數比較簡單;而另一種是專門為32位程式設計,在使用時就顯得麻煩些,下面我就把這兩組函數一一介紹:

一、和16位程式相容的一組函數
⑴_lopen
   原型:

   HFILE _lopen(
             LPCSTR lpPathName, // 檔案名稱
             int iReadWrite //檔案存取方式
    );

    功能:開啟檔案,成功返回其控制代碼,與此類似的還有個OpenFile()函數,可自行查閱協助檔案。

    參數說明:lpPathName是要開啟的檔案名稱,iReadWrite是檔案存取方式,主要有3種方式:

                     OF_READ:以唯讀方式開啟

                     OF_READWRITE:以讀寫方式開啟
                     OF_WRITE:以唯寫方式開啟
  還有如 OF_SHARE_COMPAT 等屬性,由於不太常用,為裡就不一一介紹了。

⑵_lclose()
     原型:HFILE _lclose( HFILE hFile);

     功能:關閉檔案,成功返回0

     參數說明:hFile:要關閉的控制代碼

⑶_lread()
     原型:

     UINT _lread(

               HFILE hFile, // 檔案控制代碼
               LPVOID lpBuffer, // 儲存資料的緩衝區
               UINT uBytes // 要讀取的長度
      );

     功能:讀檔案,返回實際讀取的字元數,與此類似的還有個_hread()函數,可自行查閱協助檔案。

⑷_lwrite()
 原型:

      UINT _lwrite(

                HFILE hFile, // 檔案控制代碼
                LPCSTR lpBuffer, // 儲存資料的緩衝區
               UINT uBytes // 要寫的長度
       );

功能:寫檔案,返回實際寫的字元數,與此類似的還有個_hwrite()函數,可自行查閱協助檔案。

⑸_llseek()
原型:

      LONG _llseek(

                HFILE hFile, // 檔案控制代碼
                LONG lOffset, // 移動的量
                int iOrigin // 移動的基準位置
      );

      功能:移動檔案的讀寫位置,成功返回移動後的檔案讀寫位置

      參數說明:iOrigin的取值是以下三種情況之一:

              FILE_BEGIN:檔案頭部

              FILE_CURRENT:檔案當前位置
              FILE_END:檔案尾部
⑹_lcreat()
原型:

         HFILE _lcreat(

                    LPCSTR lpPathName, //要建立的檔案名稱
                    int iAttribute // 檔案屬性
          );

功能:建立檔案,成功返回其控制代碼

參數說明:檔案屬性是以下值的和:

0:普通檔案
1:唯讀檔案
2:隱含檔案
4:系統檔案
  這幾個函數的用法和所列的BCB庫函數差不多,建議使用BCB的庫函數。可參閱前文基於BCB庫函數的檔案操作。

二、32位程式相容

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

將視圖的變化重新整理寫入磁碟

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.