1 文件的创建和打开CreateFile
创建或打开文件或 I/O 设备。最常用的 I/O 设备如下:文件、文件流、目录、物理磁盘、卷、控制台缓冲区、磁带驱动器、通信资源、邮槽和管道。该函数返回一个句柄,该句柄可用于根据文件或设备以及指定的标志和属性为各种类型的 I/O 访问文件或设备。
HANDLE CreateFileA(
LPCSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
1.1 参数介绍
(1)lpFileName:要创建或打开的文件或设备的名称。您可以在此名称中使用正斜杠 (/) 或反斜杠 (\)。
(2)dwDesiredAccess:请求的对文件或设备的访问,可以概括为读、写、或两者都不为零)。最常用的值是GENERIC_READ, GENERIC_WRITE或两者(GENERIC_READ | GENERIC_WRITE
)。
(3)dwSharedMode:请求的文件或设备的共享模式,可以是读、写、两者、删除、所有这些或无(参考下表)。对属性或扩展属性的访问请求不受此标志的影响。如果此参数为零且CreateFile成功,则在文件或设备的句柄关闭之前,无法共享文件或设备并且无法再次打开该文件或设备。
注意 每个打开的句柄的共享选项一直有效,直到该句柄关闭,无论进程上下文如何。
(4)lpSecurityAttributes:指向SECURITY_ATTRIBUTES 结构的指针,该结构包含两个单独但相关的数据成员:一个可选的安全描述符,以及一个布尔值,该布尔值确定子进程是否可以继承返回的句柄。此参数可以为NULL。
(5)dwCreationDisposition:对存在或不存在的文件或设备采取的操作。对于文件以外的设备,此参数通常设置为OPEN_EXISTING。
此参数必须是以下值之一,不能组合:
(6)dwFlagsAndAttributes:文件或设备属性和标志,FILE_ATTRIBUTE_NORMAL是文件最常见的默认值。此参数可以包括可用文件属性 ( FILE_ATTRIBUTE_* ) 的任意组合。所有其他文件属性覆盖 FILE_ATTRIBUTE_NORMAL。
(7)hTemplateFile:具有GENERIC_READ访问权限的模板文件的有效句柄。模板文件为正在创建的文件提供文件属性和扩展属性。此参数可以为NULL。
详细请见:https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea
1.2 返回值
如果函数成功,则返回值是指定文件、设备、命名管道或邮槽的打开句柄。
如果函数失败,则返回值为INVALID_HANDLE_VALUE。要获取扩展错误信息,请调用GetLastError。
1.3 函数应用
#include <windows.h>
using namespace std;
int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
/*
/ 创建和打开文件操作
*/
HANDLE hFile = CreateFile("E:\\Project\\07_test\\test.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL,
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE != hFile)
{
MessageBox(NULL, "创建文件成功", "Tip", MB_OK);
CloseHandle(hFile);
}
else
{
DWORD dwError = GetLastError();
MessageBox(NULL, "创建文件失败", "Tip", MB_OK);
}
return 0;
}
2 关闭文件 CloseHandle
关闭一个打开的对象句柄。
BOOL CloseHandle(
HANDLE hObject
);
2.1 参数介绍
(1)hObject:打开对象的有效句柄。
2.2 返回值
如果函数成功,则返回值非零。
如果函数失败,则返回值为零。要获取扩展错误信息,请调用 GetLastError。
详细请见:https://docs.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-closehandle
2.3 函数应用
见1.3。