VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1543|回复: 6

[API档案] CreateFile 函数说明

[复制链接]
51_avatar_middle
最佳答案
82 
online_admins 发表于 2019-6-12 23:24:24 | 显示全部楼层 |阅读模式
简介:
创建或打开文件或 I/O 设备。常用的 I/O 设备有:文件,文件流,目录,物理磁盘,卷,控制台缓冲区,磁带驱动器,通信资源,邮筒和管道。
该函数返回一个句柄,该句柄可用于根据文件或设备以及指定的标志和属性访问文件或设备以获取各种类型的 I/O。

语法格式:
  1. HANDLE WINAPI CreateFile(
  2.   _In_     LPCTSTR               lpFileName,
  3.   _In_     DWORD                 dwDesiredAccess,
  4.   _In_     DWORD                 dwShareMode,
  5.   _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  6.   _In_     DWORD                 dwCreationDisposition,
  7.   _In_     DWORD                 dwFlagsAndAttributes,
  8.   _In_opt_ HANDLE                hTemplateFile
  9. );
复制代码


参数
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 设备和机制。




上一篇:第05课 文件的删除、复制与重命名操作 | 课程代码
下一篇:CloseHandle 函数说明
58_avatar_middle
最佳答案
43 
online_vip 发表于 2019-8-29 09:58:17 | 显示全部楼层
打开文件要好好研究一下。
72_avatar_middle
最佳答案
0 
在线会员 发表于 2020-2-23 13:08:20 | 显示全部楼层
好评,有了这些很清晰
71_avatar_middle
最佳答案
0 
在线会员 发表于 2020-7-17 18:47:55 | 显示全部楼层
CreateFile函数是可不可以创建文件夹?还有个问题是用记事本打开文件可不可以实现?
71_avatar_middle
最佳答案
0 
在线会员 发表于 2020-7-17 18:55:56 | 显示全部楼层
网上搜索了下,好像这两个问题都不能用CreateFile函数实现。
41_avatar_middle
最佳答案
0 
在线会员 发表于 2020-8-14 18:48:02 | 显示全部楼层
感谢分享,谢谢老大
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-10-25 15:29

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表