【发布时间】:2013-01-22 22:57:05
【问题描述】:
谁能解释一下windows API的CreateFile()函数的创建配置OPEN_ALWAYS和CREATE_ALWAYS有什么区别?
在我看来,它们似乎都只是“如果文件不存在则创建文件”。
【问题讨论】:
标签: c windows createfile
谁能解释一下windows API的CreateFile()函数的创建配置OPEN_ALWAYS和CREATE_ALWAYS有什么区别?
在我看来,它们似乎都只是“如果文件不存在则创建文件”。
【问题讨论】:
标签: c windows createfile
CREATE_ALWAYS 如果文件已经存在,也会截断内容。另一方面,OPEN_ALWAYS 不会破坏已经存在的文件。
以下是表格形式的不同值的工作方式:
| When the file...
This argument: | Exists Does not exist
-------------------------+------------------------------------------------------
CREATE_ALWAYS | Truncates Creates
CREATE_NEW +-----------+ Fails Creates
OPEN_ALWAYS ===| does this |===> Opens Creates
OPEN_EXISTING +-----------+ Opens Fails
TRUNCATE_EXISTING | Truncates Fails
【讨论】:
OPEN_ALWAYS 或OPEN_EXISTING。)在这两种情况下,文件指针都会指向文件的开头。因此,如果您随后开始写入该文件,它将覆盖文件的开头,并且 不会 将其附加到文件的末尾。要更改它,请在写入之前使用 SetFilePointerEx 函数和 FILE_END 标志。
WriteFiles 最终的位置实际上取决于访问掩码,如果您只要求文件附加,它将写入 NT 上的文件末尾。