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:
// 主要作用是決定 CreateFile() 返回的句柄是否可以被子進程繼承。
// 該值通常設置為 NULL 表示不能被繼承。
typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; / /結構體的大小,可用SIZEOF取得 LPVOID lpSecurityDescriptor; / /安全描述符(一般為 NULL) BOOL bInheritHandle ;/ /安全描述的對象能否被新創建的進程繼承 } SECURITY_ATTRIBUTES,* PSECURITY_ATTRIBUTES;
CloseHandle() 介紹:
函數原型:BOOL ReadFile(
HANDLE hFile, //文件的句柄。LPVOID lpBuffer, //用於保存讀入數據的一個緩沖區。
DWORD nNumberOfBytesToRead, //指定需要要讀入的字符數。
LPDWORD lpNumberOfBytesRead, //返回實際讀取字節數的指針。
LPOVERLAPPED lpOverlapped //如文件打開時指定了FILE_FLAG_OVERLAPPED,
);
功能:從文件指針指向的位置開始將數據寫入到一個文件中, 且支持同步和異步操作。
HANDLE hFile, // 文件句柄
LPCVOID lpBuffer, // 要寫入的數據。
DWORD nNumberOfBytesToWrite, // 要寫入的字節數。
LPDWORD lpNumberOfBytesWritten, // 實際寫入的字節數。
LPOVERLAPPED lpOverlapped // 同 ReadFile(), 一般設置為 NULL。
);
LPCSTR lpPathName, //目錄路徑名。
LPSECURITY_ATTRIBUTES lpSecurityAttributes // 安全屬性,同 CreateFile() ;
);
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 // 緩沖區的大小。
);
返回值:如果函數成功, 則返回值為零。如果文件名無效, 則返回值未知。如果出現錯誤, 返回值為負數。
LPTSTR lpBuffer, // 指向要接收路徑的緩沖區的指針。
UINT uSize // 緩沖區的最大大小.
);
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 | 標示一個文件是臨時文件。 |
#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; }
