FILE_ATTRIBUTE_NORMAL和0之间有什么区别?

13

在CreateFile函数中,传递FILE_ATTRIBUTE_NORMAL(0x80)和0之间有什么区别?


2
@John:我不认为这是那个问题的重复。那个问题问的是 0 是什么意思。而这个问题问的是使用 0FILE_ATTRIBUTE_NORMAL 有什么区别。(这个问题的答案在那里的回答中没有被回答。) - T.J. Crowder
4
我很想知道为什么会有FILE_ATTRIBUTE_NORMAL这个标志(即为什么要有一个表示“没有设置标志”的标志,而0本来就可以表示这个意思)。可能是出于历史原因,但我找不到任何解释。 - Jonathan Potter
如果这是历史问题,而且没有人知道原因,那我想读一下Raymond Chen关于此的博客文章。有人可以请他写一篇吗? :) - txt
让 Raymond Chen 不写关于某个主题的博客的最好方法就是要求他写关于它的博客 :) - Jonathan Potter
2个回答

8

从CreateFile()的MSDN页面中得知:

注意:当CreateFile打开一个已存在的文件时,它通常会将文件标志和现有文件的文件属性结合起来,忽略作为dwFlagsAndAttributes的一部分提供的任何文件属性。

或者换句话说,当您打开一个已存在的文件时,需要一个值表示“我不在乎”,因为操作系统不在乎。那个值是0。


如果你传递FILE_ATTRIBUTE_NORMAL,那么这是否也意味着“我不在乎”?那么创建一个新文件呢?那里会有影响吗? - Eran Zimmerman Gonen

2

FILE_ATTRIBUTE_NORMAL 明确地不设置任何属性。如果您传递 0,则属性集是未指定的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接