API---文件操作


CreateFile() 介紹:

功能:打開或創建以下對象,並返回可訪問的句柄:

          控制台,通信資源,目錄(只讀打開),磁盤驅動器,文件,郵槽,管道。

函數原型:HANDLE CreateFile (

                  LPCTSTR lpFileName,    // 指向文件或其它設備名的指針。詳情可見 CreateFile() 詳解
                  DWORD dwDesiredAccess,    // 訪問模式(寫 / 讀)

                  DWORD dwShareMode,    // 共享模式 
                  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 指向安全屬性的指針,一般為 NULL。 
                  DWORD dwCreationDisposition,   // 如何創建 
                  DWORD dwFlagsAndAttributes,   // 文件屬性 
                  HANDLE hTemplateFile    // 用於復制文件句柄 
                  );

參數:( 組合) 

          lpFileName:若為命名管道服務器,則該值形式為:“\\.\pipe\pipename”,

                                若為命名管道客戶端,則該值形式為:"\\servername\pipe\pipename"。

                                若為郵件槽服務器,則該值形式為:"\\.\mailslot\mailslotname",

                                若為郵件槽客戶端,則該值形式為:"\\servername\mailslotname"。

 

          dwDesiredAccess:GENERIC_READ , GENERIC_WRITE, 0 (只允許獲取與設備有關的信息) 。

          dwShareMode:FILE_SHARE_DELETE, FILE_SHARE_READ, FILE_SHARE_WRITE, 0 (不共享)。

          lpSecurityAttributes:指向一個 SECURITY_ATTRIBUTES 結構的指針。

          dwCreationDisposition:

                                              CREATE_NEW 創建文件;如文件存在則會出錯。
                                              CREATE_ALWAYS 創建文件,會改寫前一個文件。
                                              OPEN_EXISTING 文件必須已經存在。由設備提出要求。
                                              OPEN_ALWAYS 如文件不存在則創建它。
                                              TRUNCATE_EXISTING 將現有文件縮短為零長度。
          dwFlagsAndAttributes:
                                               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 關閉了上一次打開的句柄后,將文件刪除。
          hTemplateFile:如果不為零,則指定一個文件句柄,新文件將從這個文件中復制和擴展屬性。
 
返回值:如執行成功,則返回文件句柄。否則返回 INVALID_HANDLE_VALUE。
 
struct _SECURITY_ATTRIBUTES 結構體:
// 主要作用是決定 CreateFile() 返回的句柄是否可以被子進程繼承。
// 該值通常設置為 NULL 表示不能被繼承。
typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; / /結構體的大小,可用SIZEOF取得 LPVOID lpSecurityDescriptor; / /安全描述符(一般為 NULL) BOOL bInheritHandle ;/ /安全描述的對象能否被新創建的進程繼承 } SECURITY_ATTRIBUTES,* PSECURITY_ATTRIBUTES;

 

CloseHandle() 介紹:

功能:關閉一個內核對象。其中包括文件、文件映射、進程、線程、安全和同步對象等。
函數原型:BOOL CloseHandle( HANDLE hObject ) ;
參數:hObject Long,欲關閉的一個對象的句柄。
返回值:非零表示成功,零表示失敗。
 
ReadFile() 介紹:
功能:從文件指針指向的位置開始將數據讀出到一個文件中, 且支持同步和異步操作。

函數原型:BOOL ReadFile(

             HANDLE hFile, //文件的句柄。
             LPVOID lpBuffer, //用於保存讀入數據的一個緩沖區。
             DWORD nNumberOfBytesToRead, //指定需要要讀入的字符數。
             LPDWORD lpNumberOfBytesRead, //返回實際讀取字節數的指針。
             LPOVERLAPPED lpOverlapped //如文件打開時指定了FILE_FLAG_OVERLAPPED,
       // 那么必須用這個參數引用一個特殊的結構。該結構定義了一次異步讀取操作。否則,應將這個參數設為NULL。
  );
返回值:非零表示成功,零表示失敗。
 
WriteFile() 介紹:
功能:從文件指針指向的位置開始將數據寫入到一個文件中, 且支持同步和異步操作。
函數原型:BOOL WriteFile(
                  HANDLE       hFile,    // 文件句柄
                  LPCVOID      lpBuffer,  // 要寫入的數據。
                  DWORD        nNumberOfBytesToWrite,  // 要寫入的字節數。
                  LPDWORD      lpNumberOfBytesWritten, // 實際寫入的字節數。
                  LPOVERLAPPED lpOverlapped       //  同 ReadFile(), 一般設置為 NULL。
);
返回值:非零表示成功,零表示失敗。
 
SetFilePointer() 介紹:
功能:在一個文件中設置當前的讀取位置。
函數原型:DWORD SetFilePointer(
                  HANDLE hFile, // 文件句柄。
                  LONG lDistanceToMove, // 偏移量(低位)。
                  PLONG lpDistanceToMoveHigh, // 偏移量(高位)。( 通常為 NULL)
                  DWORD dwMoveMethod // 基准位置:
                                                               FILE_BEGIN:文件開始位置。
                                                               FILE_CURRENT:文件當前位置 。
                                                               FILE_END:文件結束位置。
返回值:返回一個新位置,HFILE_ERROR意味着出錯。
 
DeleteFile() 介紹:
功能:刪除指定文件或目錄。
函數原型:BOOL DeleteFile(
                  LPCSTR  lpFileName // 指向要刪除的文件。
                  );
返回值:非零表示成功,零表示失敗。
 
  CreateDirectory() 介紹:
功能:創建新的目錄。
函數原型:BOOL CreateDirectoryA(
                  LPCSTR                lpPathName,   //目錄路徑名。
                  LPSECURITY_ATTRIBUTES lpSecurityAttributes  // 安全屬性,同 CreateFile() ;
                  );
返回值:非零表示成功,零表示失敗。
 
RemoveDirectory() 介紹:
功能:刪除目錄。
函數原型:BOOL RemoveDirectory(
                  LPCTSTR lpPathName // 指向要刪除的目錄。
                  );
返回值:非零表示成功,零表示失敗。
 
CopyFile() 介紹:
功能:復制文件或目錄。
函數原型:BOOL CopyFile(
                  LPCTSTRlpExistingFileName,  // 指向源文件名。
                  LPCTSTR lpNewFileName, // 指向目標文件名。
                  BOOL bFailIfExists     // 文件操作標志。指明如果在目的路徑存在文件時是否覆蓋。
                  //如果設為TRUE(非零),將不覆蓋已經存在的文件。否則覆蓋已存在的文件。
                  );
返回值:非零表示成功,零表示失敗。
 
MoveFile() 介紹:
功能:移動文件或目錄位置。
函數原型:BOOL MoveFile(
                  LPCTSTR lpExistingFileName, // 指向源文件名。
                  LPCTSTR lpNewFileName // 指向目標文件名。
                  );
返回值:非零表示成功,零表示失敗。
 

GetModuleFileName() 介紹:

功能:獲取當前進程已加載模塊的文件的完整路徑,該模塊必須由當前進程加載。

函數原型:DWORD WINAPI GetModuleFileName(

                  HMODULE  hModule,   // 表示正在被加載模塊的句柄。

                                                        //如果為 NULL,則將當前可執行文件的完整路徑復制到 lpFilename 中

                  LPTSTR  lpFileName,  //  指向保存完整路徑的文件名。

                  DWORD  nSize       // 表示復制到 lpFileName 的最大字符數量。

                  ); 

返回值:如執行成功,返回復制到lpFileName的實際字符數量;零表示失敗。

 

GetFileTitle() 介紹

功能:從指定的文件路徑中獲取文件的名稱。

(例如指定文件路徑為:C:\Users\Public\Documents\Test.txt,則文件名稱為 Test。

函數原型:short GetFileTitleA(
                  LPCSTR Path, // 指定的文件路徑。
                  LPSTR  Buf, // 接收文件名稱的緩沖區。
                  WORD  cchSize  // 緩沖區的大小。
                  );

返回值:如果函數成功, 則返回值為零。如果文件名無效, 則返回值未知。如果出現錯誤, 返回值為負數。

 

 
GetSystemDirectory() 介紹:
功能:取得Windows系統目錄 (System目錄) 的完整路徑名。
函數原型:UINT WINAPI GetSystemDirectory(
                  LPTSTR lpBuffer,   // 指向要接收路徑的緩沖區的指針。
                  UINT   uSize    // 緩沖區的最大大小.
                  );
返回值:如果函數成功, 則返回值是復制到緩沖區的字符串的長度。如果函數失敗, 則返回值為零。
 
SetFileAttributes() 介紹:
功能:設置文件或目錄屬性。
函數原型:BOOL SetFileAttributes(

                  LPCTSTR lpFileName,     // 指定的文件名。

                  DWORD dwFileAttributes  // 文件屬性(值如下表:)。

                  );

返回值:非零表示成功,零表示失敗。

 

屬性
含義
FILE_ATTRIBUTE_ARCHIVE
該文件是一個存檔文件。應用程序使用此屬性來備份或移除標記文件。
FILE_ATTRIBUTE_HIDDEN
該文件是隱藏的。它不包括在普通的目錄列表。
FILE_ATTRIBUTE_NORMAL
該文件沒有設置其他的屬性。此屬性僅在單獨使用有效。
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
該文件將不被內容索引服務編制索引。
FILE_ATTRIBUTE_OFFLINE
該文件的數據不是立即可用。
此屬性表明文件數據被物理移動到離線存儲。
此屬性用於通過遠程存儲,分層存儲管理軟件。
應用程序不應隨意更改此屬性。
FILE_ATTRIBUTE_READONLY
該文件是只讀的。應用程序可以讀取該文件,但不能寫入或刪除它。
FILE_ATTRIBUTE_SYSTEM
該文件是操作系統的一部分,或者完全由它使用。
FILE_ATTRIBUTE_TEMPORARY
該文件是被用於暫時存儲。文件系統避免寫入數據傳回海量存儲
如果有足夠的緩存內存可用,因為經常在應用程序刪除后不久
,這個句柄被關閉的臨時文件。在這種情況下,該系統可以完全避免記錄的數據。否則,在手柄關閉的數據將被寫入。

 

GetFileAttributes() 介紹:

功能:為一個指定的文件或目錄返回文件系統的屬性。

函數原型:DWORD GetFileAttributes(
                  LPCSTR lpFileName  // 指定的文件名。
                  );

返回值:如果函數成功,返回值包含文件或目錄的屬性。

              如果函數失敗,返回值是INVALID_FILE_ATTRIBUTES。

屬性 含義
FILE_ATTRIBUTE_ARCHIVE 標示一個文件(或目錄)是一個存檔文件(或目錄)。
FILE_ATTRIBUTE_COMPRESSED
標示一個文件(或目錄)是一個壓縮文件(或目錄)。
用於文件時:該文件中所有的記錄都是經過壓縮的;
用於目錄時:在該目錄下新建文件或子目錄時會默認進行壓縮。
FILE_ATTRIBUTE_DIRECTORY 此句柄被視為一個目錄
FILE_ATTRIBUTE_ENCRYPTED
標示一個文件(或目錄)是一個加密文件(或目錄)。
用於文件時:該文件中所有的記錄都是經過加密的,包括讀寫操作;
用於目錄時:在該目錄下新建文件或子目錄時會默認進行加密。
FILE_ATTRIBUTE_HIDDEN 標示一個文件(或目錄)是一個隱藏文件(或目錄)。
FILE_ATTRIBUTE_NORMAL 標示一個文件(或目錄)不具有其他屬性,此屬性只能單獨使用!
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 標示一個文件不可被內容索引服務索引。
FILE_ATTRIBUTE_OFFLINE
標示一個文件是脫機文件,該文件中的內容無法直接使用。
如果某個文件具有該屬性,請不要輕易修改此屬性,它可能是某些遠程存儲服務程序的存儲文件。
FILE_ATTRIBUTE_READONLY
標示一個文件(或目錄)是一個只讀文件(或目錄)。
用於文件時:只能讀取文件內容,無法修改或刪除;
用於目錄時:該目錄無法刪除。
FILE_ATTRIBUTE_REPARSE_POINT 標示一個文件(或目錄)擁有相關的重新解析點,比如用mklink創建的硬鏈接或符號鏈接
FILE_ATTRIBUTE_SPARSE_FILE 標示一個文件是稀疏文件
FILE_ATTRIBUTE_SYSTEM 標示一個文件(或目錄)是一個系統文件(或目錄)。
FILE_ATTRIBUTE_TEMPORARY 標示一個文件是臨時文件。
 
DEMO CODE:
#include<stdio.h>
#include<Windows.h>
int main(void)
{
    HANDLE hFile;
    BOOL Bool;
    TCHAR lpBuffer[MAX_PATH];
    LPDWORD Num = 0;
    hFile = CreateFile("C:\\Users\\Public\\Documents\\Test.txt",
        GENERIC_ALL,
        NULL,
        NULL,
        CREATE_ALWAYS,
        FILE_ATTRIBUTE_HIDDEN,
        NULL);
    if (hFile == INVALID_HANDLE_VALUE)
    {
        printf("Create File Error!\n");
        system("pause");
        exit(0);
    }

    printf("Input what you want to write:\n");
    gets_s(lpBuffer);

    Bool = WriteFile(hFile,
        lpBuffer,
        MAX_PATH,
        Num,
        NULL);

    if (!Bool)
    {
        printf("Write File Error\n");
        system("pause");
        exit(0);
    }

    CloseHandle(hFile);
    printf("Create and Write Succeed\n");
    system("pause");
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM