CreateFile
函数是Windows API中用于创建、打开或枚举文件或目录的文件操作函数。其原型如下:
HANDLE CreateFile(
LPCTSTR FileName, // 文件名
DWORD DesiredAccess, // 访问模式
DWORD ShareMode, // 分享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全属性
DWORD CreationDisposition, // 创建方式
DWORD FlagsAndAttributes, // 文件属性
HANDLE hTemplateFile // 模板文件句柄
);
以下是CreateFile
函数参数的设置说明:
FileName
:指定要创建、打开或枚举的文件或目录的路径名。
DesiredAccess
:指定要访问文件或目录的方式。此参数可以是以下值的组合:
FILE_READ_DATA
:读取文件数据。FILE_WRITE_DATA
:写入文件数据。FILE_APPEND_DATA
:在文件末尾添加数据。FILE_READ_ATTRIBUTES
:读取文件属性。FILE_WRITE_ATTRIBUTES
:写入文件属性。DELETE
:删除文件。DELETE_ON_CLOSE
:在关闭文件句柄时删除文件。READ_CONTROL
:读取文件控制信息。WRITE_CONTROL
:写入文件控制信息。SYNCHRONIZE_ACCESS
:同步对文件的访问。MAXimalAccess
:最大访问权限。ShareMode
:指定其他进程对文件或目录的共享方式。此参数可以是以下值的组合:
FILE_SHARE_READ
:允许其他进程读取文件。FILE_SHARE_WRITE
:允许其他进程写入文件。FILE_SHARE_DELETE
:允许其他进程删除文件。lpSecurityAttributes
:指向一个SECURITY_ATTRIBUTES
结构体,用于指定文件或目录的安全属性。如果此参数为NULL
,则文件或目录将具有默认的安全属性。
CreationDisposition
:指定要创建或打开文件的方式。此参数可以是以下值之一:
CREATE_NEW
:创建一个新文件,如果文件已存在,则失败。CREATE_ALWAYS
:创建一个新文件,如果文件已存在,则覆盖它。OPEN_EXISTING
:打开一个现有文件,如果文件不存在,则失败。OPEN_ALWAYS
:打开一个现有文件,如果文件不存在,则创建它。TRUNCATE_EXISTING
:截断现有文件,将其长度设置为0,如果文件不存在,则创建一个新文件。FlagsAndAttributes
:指定文件或目录的标志和属性。此参数可以是以下值的组合:
FILE_ATTRIBUTE_ARCHIVE
:文件是存档文件。FILE_ATTRIBUTE_HIDDEN
:文件是隐藏文件。FILE_ATTRIBUTE_NORMAL
:文件是普通文件。FILE_ATTRIBUTE_SYSTEM
:文件是系统文件。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
:指定一个模板文件的句柄,用于创建新文件。如果此参数为NULL
,则新文件将不具有任何模板属性。
以下是一个简单的示例,演示如何使用CreateFile
函数创建一个新文件:
#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, // 创建方式
0, // 文件属性
NULL // 模板文件句柄
);
if (hFile == INVALID_HANDLE_VALUE) {
printf("Error: %lu\n", GetLastError());
return 1;
}
if (!WriteFile(
hFile, // 文件句柄
fileContent, // 要写入的数据
strlen(fileContent), // 数据长度
&dwBytesWritten, // 写入的字节数
NULL // 重叠结构体
)) {
printf("Error: %lu\n", GetLastError());
CloseHandle(hFile);
return 1;
}
CloseHandle(hFile);
printf("File created successfully.\n");
return 0;
}
在这个示例中,我们使用CreateFile
函数创建一个名为test.txt
的新文件,并使用WriteFile
函数向文件中写入字符串Hello, World!
。如果文件创建成功,程序将输出File created successfully.
。