Win32 方法 CreateFile 中选择合适的文件打开模式(CREATE_NEW, CREATE_ALWAYS, OPEN_EXISTING, O...

栏目: IT技术 · 发布时间: 6年前

内容简介:Windows 打开文件的 API 中提供了多种不同的文件打开方式。你可以根据你的业务场景选择适合你的文件打开方式。

Windows 打开文件的 API 中提供了多种不同的文件打开方式。你可以根据你的业务场景选择适合你的文件打开方式。

Windows API

OpenFile 方法只能打开已经存在的文件,而使用 CreateFile 则可以在打开文件的同时应对不存在文件时的创建。

HANDLE CreateFileW(
  LPCWSTR               lpFileName,
  DWORD                 dwDesiredAccess,
  DWORD                 dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD                 dwCreationDisposition,
  DWORD                 dwFlagsAndAttributes,
  HANDLE                hTemplateFile
);

其中 dwCreationDisposition 参数用来指定文件打开的时候如何处理文件的创建和追加行为。

dwCreationDisposition

dwCreationDisposition 可以传入 5 种不同的值。

CREATE_NEW
CREATE_ALWAYS
OPEN_EXISTING
OPEN_ALWAYS
TRUNCATE_EXISTING

CREATE_NEW

如果文件不存在,则创建一个文件。如果文件不存在,则执行失败,通过 GetLastError 可以得到错误码 ERROR_FILE_EXISTS (80)。

CREATE_ALWAYS

如果文件不存在,则创建一个新的文件。如果文件已经存在,则此文件将完全被复写。

基于此文件流的修改会完全复写文件。也就是说,如果原文件内容是 walterlv ,通过此文件流写入 111 ,那么最终文件内容是 111

OPEN_EXISTING

如果文件存在,则打开文件。如果文件不存在,通过 GetLastError 可以得到错误码 ERROR_FILE_NOT_FOUND (2)。

基于此文件流的修改不会截断文件。也就是说,如果原文件内容是 walterlv ,通过此文件流写入 111 ,那么最终文件内容是 111terlv

OPEN_ALWAYS

如果文件存在,那么会成功打开文件;并且也可以通过 GetLastError 可以得到状态 ERROR_ALREADY_EXISTS (183)。如果文件不存在,新建一个文件。

基于此文件流的修改不会截断文件。也就是说,如果原文件内容是 walterlv ,通过此文件流写入 111 ,那么最终文件内容是 111terlv

TRUNCATE_EXISTING

如果文件存在,则打开后文件的长度直接变为 0。如果文件不存在,通过 GetLastError 可以得到错误码 ERROR_FILE_NOT_FOUND (2)。

总结表

dwCreationDisposition 如果文件存在 如果文件不存在
CREATE_NEW ERROR_FILE_EXISTS 新建
CREATE_ALWAYS 截断 新建
OPEN_EXISTING 打开 ERROR_FILE_NOT_FOUND
OPEN_ALWAYS 打开 新建
TRUNCATE_EXISTING 截断 ERROR_FILE_NOT_FOUND

所有这些打开模式都不会修改到文件的属性(Attribute),包括创建时间、针对用户的权限设置。所以如果你希望连这些属性都不需要,而是完完全全创建新的文件,那么请先将原来的文件删除。

参考资料


以上所述就是小编给大家介绍的《Win32 方法 CreateFile 中选择合适的文件打开模式(CREATE_NEW, CREATE_ALWAYS, OPEN_EXISTING, O...》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

社交网站的数据挖掘与分析

社交网站的数据挖掘与分析

Matthew A. Russell / 师蓉 / 机械工业出版社 / 2012-2 / 59.00元

Facebook、Twitter和LinkedIn产生了大量宝贵的社交数据,但是你怎样才能找出谁通过社交媒介正在进行联系?他们在讨论些什么?或者他们在哪儿?这本简洁而且具有可操作性的书将揭示如何回答这些问题甚至更多的问题。你将学到如何组合社交网络数据、分析技术,如何通过可视化帮助你找到你一直在社交世界中寻找的内容,以及你闻所未闻的有用信息。 每个独立的章节介绍了在社交网络的不同领域挖掘数据的......一起来看看 《社交网站的数据挖掘与分析》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换