CreateFile
函數(shù)是Windows API中用于創(chuàng)建、打開或枚舉文件或目錄的文件操作函數(shù)。其原型如下:
HANDLE CreateFile(
LPCTSTR FileName, // 文件名
DWORD DesiredAccess, // 訪問模式
DWORD ShareMode, // 分享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全屬性
DWORD CreationDisposition, // 創(chuàng)建方式
DWORD FlagsAndAttributes, // 文件屬性
HANDLE hTemplateFile // 模板文件句柄
);
以下是CreateFile
函數(shù)參數(shù)的設置說明:
FileName
:指定要創(chuàng)建、打開或枚舉的文件或目錄的路徑名。
DesiredAccess
:指定要訪問文件或目錄的方式。此參數(shù)可以是以下值的組合:
FILE_READ_DATA
:讀取文件數(shù)據(jù)。FILE_WRITE_DATA
:寫入文件數(shù)據(jù)。FILE_APPEND_DATA
:在文件末尾添加數(shù)據(jù)。FILE_READ_ATTRIBUTES
:讀取文件屬性。FILE_WRITE_ATTRIBUTES
:寫入文件屬性。DELETE
:刪除文件。DELETE_ON_CLOSE
:在關閉文件句柄時刪除文件。READ_CONTROL
:讀取文件控制信息。WRITE_CONTROL
:寫入文件控制信息。SYNCHRONIZE_ACCESS
:同步對文件的訪問。MAXimalAccess
:最大訪問權限。ShareMode
:指定其他進程對文件或目錄的共享方式。此參數(shù)可以是以下值的組合:
FILE_SHARE_READ
:允許其他進程讀取文件。FILE_SHARE_WRITE
:允許其他進程寫入文件。FILE_SHARE_DELETE
:允許其他進程刪除文件。lpSecurityAttributes
:指向一個SECURITY_ATTRIBUTES
結構體,用于指定文件或目錄的安全屬性。如果此參數(shù)為NULL
,則文件或目錄將具有默認的安全屬性。
CreationDisposition
:指定要創(chuàng)建或打開文件的方式。此參數(shù)可以是以下值之一:
CREATE_NEW
:創(chuàng)建一個新文件,如果文件已存在,則失敗。CREATE_ALWAYS
:創(chuàng)建一個新文件,如果文件已存在,則覆蓋它。OPEN_EXISTING
:打開一個現(xiàn)有文件,如果文件不存在,則失敗。OPEN_ALWAYS
:打開一個現(xiàn)有文件,如果文件不存在,則創(chuàng)建它。TRUNCATE_EXISTING
:截斷現(xiàn)有文件,將其長度設置為0,如果文件不存在,則創(chuàng)建一個新文件。FlagsAndAttributes
:指定文件或目錄的標志和屬性。此參數(shù)可以是以下值的組合:
FILE_ATTRIBUTE_ARCHIVE
:文件是存檔文件。FILE_ATTRIBUTE_HIDDEN
:文件是隱藏文件。FILE_ATTRIBUTE_NORMAL
:文件是普通文件。FILE_ATTRIBUTE_SYSTEM
:文件是系統(tǒng)文件。FILE_FLAG_BACKUP_SEMANTICS
:以備份模式打開文件。FILE_FLAG_DELETE_ON_CLOSE
:在關閉文件句柄時刪除文件。FILE_FLAG_NO_BUFFERING
:不對文件進行緩沖。FILE_FLAG_OVERLAPPED
:使用重疊結構進行異步操作。FILE_FLAG_RANDOM_ACCESS
:允許隨機訪問文件。FILE_FLAG_SEQUENTIAL_SCAN
:按順序掃描文件。FILE_FLAG_WRITE_THROUGH
:寫入操作直接寫入磁盤。hTemplateFile
:指定一個模板文件的句柄,用于創(chuàng)建新文件。如果此參數(shù)為NULL
,則新文件將不具有任何模板屬性。
以下是一個簡單的示例,演示如何使用CreateFile
函數(shù)創(chuàng)建一個新文件:
#include <windows.h>
#include <stdio.h>
int main() {
HANDLE hFile;
DWORD dwBytesWritten;
const char* fileName = "test.txt";
const char* fileContent = "Hello, World!";
hFile = CreateFile(
fileName, // 文件名
GENERIC_WRITE, // 訪問模式
0, // 分享模式
NULL, // 安全屬性
CREATE_ALWAYS, // 創(chuàng)建方式
0, // 文件屬性
NULL // 模板文件句柄
);
if (hFile == INVALID_HANDLE_VALUE) {
printf("Error: %lu\n", GetLastError());
return 1;
}
if (!WriteFile(
hFile, // 文件句柄
fileContent, // 要寫入的數(shù)據(jù)
strlen(fileContent), // 數(shù)據(jù)長度
&dwBytesWritten, // 寫入的字節(jié)數(shù)
NULL // 重疊結構體
)) {
printf("Error: %lu\n", GetLastError());
CloseHandle(hFile);
return 1;
}
CloseHandle(hFile);
printf("File created successfully.\n");
return 0;
}
在這個示例中,我們使用CreateFile
函數(shù)創(chuàng)建一個名為test.txt
的新文件,并使用WriteFile
函數(shù)向文件中寫入字符串Hello, World!
。如果文件創(chuàng)建成功,程序將輸出File created successfully.
。