CreateFile() 打开与创建文件

721 篇文章 ¥119.90 ¥299.90
CreateFile() 是Windows中用于打开和创建文件的核心API,通过不同参数组合实现多种操作,如创建新文件、打开已有文件、设置共享模式、指定文件属性等。参数包括文件路径、访问权限、共享模式、安全属性、操作模式、文件属性和模板文件句柄。常见的参数选项如dwCreationDisposition用于控制文件创建或打开行为,dwFlagsAndAttributes则涉及文件属性和访问模式的优化。此函数广泛应用于文件处理场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CreateFile() 函数用以打开和创建文件,函数原型声明如下:

HANDLE WINAPI CreateFile(
  __in      LPCTSTR lpFileName,
  __in      DWORD dwDesiredAccess,
  __in      DWORD dwShareMode,
  __in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  __in      DWORD dwCreationDisposition,
  __in      DWORD dwFlagsAndAttributes,
  __in_opt  HANDLE hTemplateFile
);

在 Windows 中,创建和打开文件的 API 都是 CreateFile() 函数,并通过指定不同的参数来表示是创建一个文件,打开已存在的文件,还是重新建立文件等。

第 1 个参数 lpFileName 是个输入参数,表示操作的对象文件的相对路径或绝对路径。

第 2 个参数 dwDesiredAccess 是个输入参数,指名对文件对象的操作存取方式,比如是 GENERIC_READ(读文件),GENERIC_WRITE(写文件) 。

第 3 个参数 dwShareMode 是个输入参数,表示共享模式。指名与其他进程是否共享该文件,可以是共享读(FILE_SHARE_READ),共享写(FILE_SHARE_WRITE),共享删除(FILE_SHARE_DELETE)。如果指名多个属性,那么可用 “|” 将几个属性做或运算。如果本进程需要独占本文件,那么就将该参数设置为 0 。

第 4 个参数 lpSecurityAttributes 是一个指向 SECURITY_ATTRIBUTES 结构的指针,表示本文件句柄的安全属性,能影响其是否可被子进程继承等操作。如果设为 NULL,则子进程不能继承本句柄。该结构并不常用。

第 5 个参数 dwCreationDisposition 是个输入参数,表示操作模式。

第 6 个参数 dwFlagsAndAttributes 是个输入参数,是文件属性和文件标志。

第 7 个参数 hTemplateFile 是个输入参数,当存取权限包括 GENERIC_WRITE 时,可以设置为一个模板文件的句柄,一般情况下该参数可设为 NULL ,表示不使用模板文件。

函数的参数选项众多,下面主要列出比较重要且常用的几个进行说明。

dwShareMode
0 – 文件不能共享,且本进程不能在这个文件上打开第 2 个 HANDLE 。
FILE_SHARE_READ – 其他进程,包括进行本调用进程,可以打开这个文件并进行并发访问。
FILE_SHARE_WRITE – 允许并发写文件。

lpSecurityAttributes
该参数指向一个 LPSECURITY_ATTRIBUTES 结构,一般使用中可置为 NULL 。

dwCreationDisposition
该参数指定是否创建文件,覆盖现有文件等。选项有以下几个:

  1. CREATE_NEW
    创建新文件,如果指定的文件已经存在那么失败。

  2. CREATE_ALWAYS
    创建新文件,如果文件存在则重建该文件,清楚文件内容及文件属性;如果文件不存在,则创建一个个新文件。

  3. OPEN_EXISTING
    打开现有文件,如果文件不存在则失败。

  4. OPEN_ALWAYS
    如果文件存在,则打开文件;如果不存在,则创建它,此时等同于 CREATE_NEW。

  5. TRUNCATE_EXISTING
    将文件长度置为 0.使用该选项时,必须至少指定 GENERIC_WRITE 访问权限,如果文件不存在时则失败,对于已经存在的文件,则该文件的内容会被全部销毁。

dwFlagsAndAttributes
该参数指定文件的属性和长度,一共有 32 个标志和属性。属性是文件的特征,且与打开的文件句柄形成对照,如果打开的是现有文件,那么这些标志将被忽略。以下几个是比较常见且重要的属性和标志值。

  1. FILE_ATTRIBUTE_NORMAL
    该属性只可在不设置其他属性(可以设置标志)时才能使用。

  2. FILE_ATTRIBUTE_READONLY
    只读文件,应用程序不能写也不能删除文件。

  3. FILE_ATTRIBUTE_ARCHIVE
    存档文件

  4. FILE_ATTRIBUTE_ENCRYPTED
    加密文件

  5. FILE_ATTRIBUTE_HIDDEN
    隐藏文件

  6. FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
    没有使用内容索引服务

  7. FILE_ATTRIBUTE_OFFLINE
    离线存储文件

  8. FILE_ATTRIBUTE_SYSTEM
    系统文件

  9. FILE_ATTRIBUTE_TEMPORARY
    临时文件

dwFlagsAndAttributes

1.FILE_FLAG_DELETE_ON_CLOSE
对临时文件有用,当最后一个打开的句柄被关闭时,Windows 会删除这个文件。

2.FILE_FLAG_OVERLAPPED
以异步 I/O 方式创建可打开文件,这个属性标志对异步 I/O 比较重要。

3.FILE_FLAG_RANDOM_ACCESS
设置该属性标志时,在程序对文件进行随机访问时,Windows 会尝试优化文件缓存。

4.FILE_FLAG_SEQUENTIAL_SCAN
该属性标志表示文件用于顺序访问,Windows 将相应的优化缓存。

5.FILE_FLAG_BACKUP_SEMANTICS
打开和创建文件是为了进行备份和恢复操作。

6.FILE_FLAG_NO_BUFFERING
不使用系统缓存(cahing,不同于硬件缓存)

5.FILE_FLAG_NO_BUFFERING
不使用系统缓存(cahing,不同于硬件缓存)

7.FILE_FLAG_NO_RECALL
远程存储

8.FILE_FLAG_WRITE_THROUGH
存取文件时,对磁盘进行直接操作,不经过缓存

9.FILE_FLAG_POSIX_SEMANTICS
按照 POSIX 规则存取

10.FILE_FLAG_OPEN_REPARSE_POINT
系统将禁止 NTFS 文件系统的“再解析”行为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值