createfile调用失败_CreateFile 函数说明

createfile调用失败_CreateFile 函数说明CreateFile 函数说明简介 创建或打开文件或 I O 设备 常用的 I O 设备有 文件 文件流 目录 物理磁盘 卷 控制台缓冲区 磁带驱动器 通信资源 邮筒和管道 该函数返回一个句柄 该句柄可用于根据文件或设备以及指定的标志和属性访问文件或设备以获取各种类型的 I O 语法格式 参数 lpFileName 要创建或打开的文件或设备的名称 可以在这个名字中使用正斜杠 或反斜杠 注意

CreateFile 函数说明

简介:

创建或打开文件或 I/O 设备。常用的 I/O 设备有:文件,文件流,目录,物理磁盘,卷,控制台缓冲区,磁带驱动器,通信资源,邮筒和管道。

该函数返回一个句柄,该句柄可用于根据文件或设备以及指定的标志和属性访问文件或设备以获取各种类型的 I/O。

语法格式:

参数

lpFileName

要创建或打开的文件或设备的名称。 可以在这个名字中使用正斜杠(/)或反斜杠(\)【注意/是转义符号】。在该函数的ANSI版本中,该名称的长度仅限于MAX_PATH字符。要将此限制扩展为32,767个宽字符,请调用该函数的Unicode版本并将“\\?\”添加到路径中。

dwDesiredAccess

所请求的文件或设备访问权限。

值 含义

0 不希望从设备读取数据或向设备写入数据。如果只想改变设备的配置(如:修改文件的时间戳),可以传0

GENERIC_READ 允许对设备进行只读访问

GENERIC_WRITE 允许对设备进行只写访问,该选项并没有隐含 GENERIC_READ标志

dwShareMode

文件或设备的请求共享模式。

值 含义

0 要求独占对设备的访问。如果设备已经打开,CreateFile 调用会失败;如果成功地打开了设备,后续的 CreateFile 调用会失败

FILE_SHARE_READ 如果有其他对象要用该设备,我们要求它们不得修改设备的数据;如果设备已经以写入方式或独占方式打开,那么CreateFile调用会失败

FILE_SHARE_WRITE 如果有其他内核对象要使用该设备,则要求它们不得读取设备的数据

FILE_SHARE_DELETE 当对文件进行操作的时候,我们不关心文件是否被逻辑删除或移动。在Windows内部,系统会先将文件标记为待删除,然后当该文件所有已打开的句柄都被关闭的时候,再将其真正的删除

lpSecurityAttributes

指向 SECURITY_ATTRIBUTES 结构的指针,该结构包含两个独立但相关的数据成员:一个可选的安全描述符以及一个布尔值,该值确定返回的句柄是否可以被子进程继承。该参数可以是NULL。

如果此参数为NULL,则由CreateFile返回的句柄不能由应用程序可能创建的任何子进程继承,并且与返回句柄关联的文件或设备将获得默认安全描述符。一般都是直接将该参数设置为NULL。

dwCreationDisposition

采取存在或不存在的文件或设备的操作。

值 含义

CREATE_NEW 告诉CreateFile创建一个新文件,如果同名文件已经存在,那么 CreateFile调用会失败

CREATE_ALWAYS 告诉CreateFile无论同名是否存在都创建新文件,若文件存在,则覆盖

OPEN_EXISTING 告诉CreateFile打开一个已有的文件或设备,如果文件或设备不存在,那么CreateFile调用会失败

OPEN_ALWAYS 告诉CreateFile打开一个已有的文件,如果文件存在,那么CreateFile会直接打开文件,如果不存在,则会创建一个新文件

TRUNCATE_EXISTING 告诉CreateFile打开一个已有的文件并将文件大小截断为0字节,如果文件不存在,那么CreateFile调用会失败

dwFlagsAndAttributes

该参数的用途:

允许我们设置一些标志来微调与设备之间的通信;

如果设备是一个文件,我们还能够设置文件的属性。

值 含义

通信标志–缓存

FILE_FLAG_NO_BUFFERING 该标志表示在访问文件的时候不要使用任何数据缓存

FILE_FLAG_SEQUENTIAL_SCAN 指定系统顺序地访问文件,系统从文件读取的数据量会超过我们的要求(减少硬盘访问),指定了FILE_FLAG_NO_BUFFERING标志,该标志不生效

FILE_FLAG_RANDOM_ACCESS 该标志表示系统不要提前读取文件数据(指定FILE_FLAG_NO_BUFFERING,则该标志不生效)

FILE_FLAG_WRITE_THROUGH 禁止写入文件时,将数据缓存在内存中(减少数据丢失的可能性)

通信标志–其他标志

FILE_FLAG_DELETE_ON_CLOSE 文件所有的句柄都被关闭后,删除该文件

FILE_FLAG_BACKUP_SEMANTICS 用于备份和恢复软件。在打开或创建任何文件之前,为了确保视图打开文件或创建文件的进程具有所需的访问特权

FILE_FLAG_POSIX_SEMANTICS 让CreateFile在创建文件或打开文件时,以区分大小写的方式来查找文件名

FILE_FLAG_OPEN_REPARSE_POINT 告诉系统忽略文件的重解析属性(重解析属性允许一个文件系统过滤器对打开文件、读取文件、写入文件以及关闭文件这些行为进行修改)

FILE_FLAG_OPEN_NO_RECALL 该标志告诉系统不要将文件内容刚从脱机存储器(offline storage,比如磁带)恢复到联机存储器(即online storage, 如硬盘)

FILE_FLAG_OVERLAPPED 该标志告诉系统我们想以异步方式来访问设备

文件设置

FILE_ATTRIBUTE_ARCHIVE 应用程序用该标志来将文件标记为待备份或待删除。当CreateFile创建一个新文件时,会自动设置该标志

FILE_ATTRIBUTE_ENCRYPTED 文件是经过加密的

FILE_ATTRIBUTE_HIDDEN 文件是隐藏的。它不会出现在通常的目录清单中

FILE_ATTRIBUTE_NORMAL 文件没有其他属性。只有单独使用的时候,这个标志才有效

FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 内容索引服务(content indexing service)不会对文件进行索引

FILE_ATTRIBUTE_OFFLINE 文件虽然存在,但文件内容已经被转移到脱机存储中

FILE_ATTRIBUTE_READONLY 文件只读

FILE_ATTRIBUTE_SYSTEM 文件是操作系统的一部分,专供操作系统使用

FILE_ATTRIBUTE_TEMPORARY 文件数据只会使用一小段时间。为了将访问时间降至最低,会尽量将文件数据保存在内存中

hTemplateFile

具有 GENERIC_READ 访问权限的模板文件的有效句柄。模板文件为正在创建的文件提供文件属性和扩展属性。该参数可以是NULL。

返回值

如果函数成功,则返回值的是指定文件、设备、命名管道或邮件插槽的句柄;

如果函数失败,则返回值为 INVALID_HANDLE_VALUE。 要获得扩展的错误信息,请调用GetLastError。

备注

CreateFile 最初是专门为文件交互而开发的,但后来被扩展和增强,以包括Windows开发人员可用的大多数其他类型的 I/O 设备和机制。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223128.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午2:47
下一篇 2026年3月17日 下午2:47


相关推荐

  • qlineedit输入提示_qlineedit设置不可编辑

    qlineedit输入提示_qlineedit设置不可编辑一、QlineEdit基本方法setAlignment()按固定值方式对齐文本Qt.AlignLeft:水平方向靠左对齐Qt.AlignRight:水平方向靠右对齐Qt.AlignCenter:水平方向居中对齐Qt.AlignJustify:水平方向调整间距两端对齐Qt.AlignTop:垂直方向靠上对齐Qt.AlignBottom:垂直方向靠下对齐Qt.AlignVCente…

    2022年10月6日
    3
  • 今日最新抗疫数据_Java算法面试题

    今日最新抗疫数据_Java算法面试题腾讯一面试下4月6日挂1自我介绍2介绍一下你在项目中的承担的任务3你对哪种语言熟悉4线程池使用过吧,说说线程池中有哪些关键字具体使用方法。5说说hashMap使用的是哪种数据结构,6说说hashMap和ConcurrentHashMap的区别7为啥hashMap是线程不安全的?8锁机制怎么使用的?9如何查看linux内存占……

    2025年5月25日
    4
  • 面试知识点总结之操作系统

    面试知识点总结之操作系统

    2021年9月17日
    51
  • ioctl函数详解_lseek函数

    ioctl函数详解_lseek函数 我这里说的ioctl函数是在驱动程序里的,因为我不知道还有没有别的场合用到了ioctl,所以就规定了我们讨论的范围。为什么要写篇文章呢,是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑。一、什么是ioctl。ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就

    2022年10月17日
    6
  • ofbiz学习笔记

    ofbiz学习笔记

    2022年1月27日
    56
  • C# 发送Http请求 – WebClient类

    WebClient位于System.Net命名空间下,通过这个类可以方便的创建Http请求并获取返回内容。一、用法1- DownloadData二、用法2- OpenRea

    2021年12月27日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号