本文主要是介绍C++ Windows API CreateFile,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
本文介绍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.
参考
参考内容:百度文言一心
这篇关于C++ Windows API CreateFile的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!