首页 > 系统相关 >C++ Windows API CreateFile

C++ Windows API CreateFile

时间:2024-08-30 23:50:31浏览次数:13  
标签:文件 Windows 句柄 CreateFile GENERIC API FILE 权限

前言

本文介绍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);  
    }  

注意事项

  1. 在使用CreateFile函数时,需要确保文件名或路径是有效的,并且应用程序具有对指定文件或目录的适当访问权限。(路径分为相对路径和绝对路径)
  2. 打开文件后,应使用CloseHandle函数关闭文件句柄,以释放系统资源。
  3. 如果在调用CreateFile函数时遇到错误,可以通过GetLastError函数获取具体的错误代码,并根据错误代码进行相应的错误处理。建议进行必要的错误处理,以减少BUG.

参考

参考内容:百度文言一心

标签:文件,Windows,句柄,CreateFile,GENERIC,API,FILE,权限
From: https://blog.csdn.net/m0_64240990/article/details/141729912

相关文章

  • .Net 5.0 WebAPI 发布至 CentOS 7 系统
    〇、前言本文主要介绍了在CentOS7上部署WebAPI项目的过程。先安装.net5.0的环境,再创建一个示例项目并发布至CentOS上,同时列明了一些注意的点;最后将dotnet命令添加到系统自启动服务。一、Linux环境准备1.1centos7.x在线安装.net5.0第一行命令是添加包源,第二......
  • [js] 页面可见性API 监测用户切屏
    PageVisibilityAPI在做考试系统或者网课系统的时候,通常需要监测用户是否隐藏了当前标签页在看其它页面。PageVisibilityAPI提供了一个事件和两个状态来监测页面可见性,可以用它来判断用户是否切屏。visibilitychange这个事件会在页面可见性变化时触发。(隐藏时、打开时)//......
  • [js] 页面可见性API 监测用户切屏
    PageVisibilityAPI在做考试系统或者网课系统的时候,通常需要监测用户是否隐藏了当前标签页在看其它页面。PageVisibilityAPI提供了一个事件和两个状态来监测页面可见性,可以用它来判断用户是否切屏。visibilitychange这个事件会在页面可见性变化时触发。(隐藏时、打开时)//......
  • [js] 页面可见性API 监测用户切屏
    PageVisibilityAPI在做考试系统或者网课系统的时候,通常需要监测用户是否隐藏了当前标签页在看其它页面。PageVisibilityAPI提供了一个事件和两个状态来监测页面可见性,可以用它来判断用户是否切屏。visibilitychange这个事件会在页面可见性变化时触发。(隐藏时、打开时)//......
  • [js] 页面可见性API 监测用户切屏
    PageVisibilityAPI在做考试系统或者网课系统的时候,通常需要监测用户是否隐藏了当前标签页在看其它页面。PageVisibilityAPI提供了一个事件和两个状态来监测页面可见性,可以用它来判断用户是否切屏。visibilitychange这个事件会在页面可见性变化时触发。(隐藏时、打开时)//......
  • [js] 页面可见性API 监测用户切屏
    PageVisibilityAPI在做考试系统或者网课系统的时候,通常需要监测用户是否隐藏了当前标签页在看其它页面。PageVisibilityAPI提供了一个事件和两个状态来监测页面可见性,可以用它来判断用户是否切屏。visibilitychange这个事件会在页面可见性变化时触发。(隐藏时、打开时)//......
  • [js] 页面可见性API 监测用户切屏
    PageVisibilityAPI在做考试系统或者网课系统的时候,通常需要监测用户是否隐藏了当前标签页在看其它页面。PageVisibilityAPI提供了一个事件和两个状态来监测页面可见性,可以用它来判断用户是否切屏。visibilitychange这个事件会在页面可见性变化时触发。(隐藏时、打开时)//......
  • pip install gdal 在Windows系统上安装gdal
     django.core.exceptions.ImproperlyConfigured:CouldnotfindtheGDALlibrary(tried"gdal302","gdal301","gdal300","gdal204","gdal203","gdal202","gdal201","gdal20").Is......
  • Windows11系统MsApoFxProxy.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个MsApoFxProxy.dll文件(挑选合适的版本文件)......
  • Windows11系统msaddsr.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个msaddsr.dll文件(挑选合适的版本文件)把它放......