1

我使用 CreateFile 最初创建一个文件,其中:

HANDLE hFile = CreateFile (TEXT(fileName.str().c_str()),      
                  GENERIC_WRITE,          
                  0,                     
                  NULL,                   
                  OPEN_ALWAYS,            
                  FILE_ATTRIBUTE_NORMAL,  
                  NULL);             

如果我CreateFile再次使用尝试再次创建相同的文件,它应该不会是一个错误?

hFile = CreateFile (TEXT(fileName.str().c_str()),      
                  GENERIC_WRITE,          
                  0,                      
                  NULL,                   
                  CREATE_ALWAYS,             
                  FILE_ATTRIBUTE_NORMAL,  
                  NULL);              

我会想到,因为CREATE_ALWAYS如果文件已经创建,我会使用它失败。

4

3 回答 3

1

CreateFile不,如果文件已经存在,CREATE_ALWAYS 标志会覆盖文件。您应该使用 CREATE_NEW 来实现您想要的。

于 2012-04-25T10:04:14.833 回答
0

CREATE_ALWAYS 会这样做,总是创建它。如果 CREATE_NEW 已经存在,它将失败。

于 2012-04-25T10:04:50.853 回答
0

否根据MSDN标志 CREATE_ALWAYS 表示:

如果指定的文件存在且可写,则该函数覆盖该文件,该函数成功,并且最后一个错误代码设置为 ERROR_ALREADY_EXISTS (183)。如果指定的文件不存在并且是有效路径,则创建一个新文件,函数成功,最后错误代码设置为零。

因此,当文件已经存在时,函数不会失败,它成功了,只是最后一个错误设置为 ERROR_ALREADY_EXISTS。

于 2012-04-25T10:07:35.490 回答