前言
本文介绍windows提供的 打开文件或创建的系统接口-----CreateFile().
开发中,时常有打开文件的需求,日常我们使用的是c++标准库内的ofstream和ifstream来进行文件的创建、读写。但是Windows系统本身也为我们提供了相关的接口。
内容
CreateFime函数原型
HANDLE CreateFile(
LPCTSTR lpFileName, // 文件名或路径
DWORD dwDesiredAccess, // 访问权限
DWORD dwShareMode, // 共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全属性
DWORD dwCreationDisposition, // 创建方式
DWORD dwFlagsAndAttributes, // 文件属性
HANDLE hTemplateFile // 模板文件句柄
);
参数说明
- lpFileName:要创建或打开的文件名或路径。可以是相对路径、绝对路径或网络路径。支持一些特殊符号,如“.”表示当前目录,“…”表示上级目录。
- dwDesiredAccess:指定对文件的访问权限。常用的值包括
GENERIC_READ
(读取权限)、GENERIC_WRITE
(写入权限)、GENERIC_EXECUTE
(执行权限)和GENERIC_ALL
(所有权限)。 - dwShareMode:指定文件共享模式。可以指定其他进程是否可以读取、写入或删除该文件。常用的值包括
FILE_SHARE_READ
(允许其他进程读取)、FILE_SHARE_WRITE
(允许其他进程写入)和FILE_SHARE_DELETE
(允许其他进程删除)。 - lpSecurityAttributes:指向SECURITY_ATTRIBUTES结构的指针,用于指定文件的安全属性。如果设置为NULL,则使用默认的安全属性。
- dwCreationDisposition:指定文件的创建方式。如果文件已存在,则此参数决定如何打开文件;如果文件不存在,则此参数决定如何创建文件。常用的值包括
CREATE_NEW
(创建新文件,如果文件已存在则失败)、CREATE_ALWAYS
(创建新文件,如果文件已存在则覆盖)、OPEN_EXISTING
(打开已存在的文件,如果文件不存在则失败)等。 - dwFlagsAndAttributes:指定文件的属性和标志。常用的值包括
FILE_ATTRIBUTE_NORMAL
(普通文件)、FILE_ATTRIBUTE_HIDDEN
(隐藏文件)、FILE_ATTRIBUTE_READONLY
(只读文件)等。此外,还可以指定一些高级选项,如FILE_FLAG_OVERLAPPED
(允许对文件进行重叠操作)和FILE_FLAG_NO_BUFFERING
(禁止对文件进行缓冲处理)等。 - hTemplateFile:指定一个模板文件的句柄,通常设置为NULL,表示不使用模板文件。
返回值
- 如果函数成功,返回值是文件的句柄。这个句柄是一个指向文件的指针,可以用来进行后续的读写操作。
- 如果函数失败,返回值是
INVALID_HANDLE_VALUE
。在这种情况下,可以使用GetLastError
函数来获取错误代码。
示例代码
HANDLE hFile = CreateFile(
L"C:\\example\\test.txt", // 文件名或路径
GENERIC_READ | GENERIC_WRITE, // 访问权限
FILE_SHARE_READ, // 共享模式
NULL, // 安全属性
CREATE_ALWAYS, // 创建方式
FILE_ATTRIBUTE_NORMAL, // 文件属性
NULL // 模板文件句柄
);
if (hFile == INVALID_HANDLE_VALUE) {
// 处理文件打开失败的情况
} else {
// 成功打开文件后的操作
// 关闭文件句柄
CloseHandle(hFile);
}
注意事项
- 在使用CreateFile函数时,需要确保文件名或路径是有效的,并且应用程序具有对指定文件或目录的适当访问权限。(路径分为相对路径和绝对路径)
- 打开文件后,应使用CloseHandle函数关闭文件句柄,以释放系统资源。
- 如果在调用CreateFile函数时遇到错误,可以通过
GetLastError
函数获取具体的错误代码,并根据错误代码进行相应的错误处理。建议进行必要的错误处理,以减少BUG.
参考
参考内容:百度文言一心
标签:文件,Windows,句柄,CreateFile,GENERIC,API,FILE,权限 From: https://blog.csdn.net/m0_64240990/article/details/141729912