Windows API的CreateFile()中的OPEN_ALWAYS和CREATE_ALWAYS之间的差异
有人能解释一下windows API函数的创建配置Windows API的CreateFile()中的OPEN_ALWAYS和CREATE_ALWAYS之间的差异,c,windows,createfile,C,Windows,Createfile,有人能解释一下windows API函数的创建配置OPEN\u ALWAYS和CREATE\u ALWAYS之间的区别吗 在我看来,他们似乎都只是“如果文件不存在,就创建文件”。create\u始终如果文件已经存在,也会截断内容。另一方面,OPEN\u ALWAYS将不会删除现有文件 以下是不同值以表格形式工作的方式: | When the file... This argument: |
OPEN\u ALWAYS
和CREATE\u ALWAYS
之间的区别吗
在我看来,他们似乎都只是“如果文件不存在,就创建文件”。
create\u始终
如果文件已经存在,也会截断内容。另一方面,OPEN\u 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
这正是我所希望的——有趣的是,文档的表述如此模糊。谢谢,桌子不错。一些随机想法:如果文件存在,有3种结果:截断、失败、打开;如果文件不存在,则有两种结果:创建、失败。因此,3*2=6种不同的行为。由于Fails/Fails完全没有用处,所以只剩下5种可能性,它们就在这里!另外,要添加到该表中的重要内容是,当打开现有文件时(当指定了
OPEN\u ALWAYS
或OPEN\u existing
时),文件指针将指向文件的开头。因此,如果您随后开始写入该文件,它将覆盖文件的开头,而不会将其附加到文件的结尾。要更改此设置,请在写入前使用带有FILE\u END
标志的SetFilePointerEx
函数。@ahmd0其中WriteFile
s的结尾实际上取决于访问掩码,如果您只请求FILE append,它将在NT上写入文件的结尾。