CreateFile() -- 打开与创建文件

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 文件系统的“再解析”行为
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值