2012-04-25 20 views
1

CreateFile函數我用CreateFile最初創建一個文件,用:與CREATE_ALWAYS處置

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,如果該文件已被創建,它會失敗。

+0

任何人都可以解釋'OPEN_ALWAYS'和'CREATE_ALWAYS'之間的區別是什麼? – 2013-01-22 22:49:36

回答

1

不,CREATE_ALWAYS標誌使CreateFile覆蓋文件,如果它已經存在。你應該使用CREATE_NEW來實現你想要的。

0

CREATE_ALWAYS將做到這一點,總是創建它。 如果CREATE_NEW已經存在,它將會失敗。

0

否根據MSDN標誌CREATE_ALWAYS指:

如果指定的文件存在並且可寫,則該函數將覆蓋該文件,函數成功,和最後的錯誤代碼被設置爲ERROR_ALREADY_EXISTS(183)。 如果指定的文件不存在並且是有效路徑,則會創建一個新文件,該函數成功,並且最後一個錯誤代碼被設置爲零。

所以函數不會在文件已經存在時失敗,它成功了,只是最後一個錯誤被設置爲ERROR_ALREADY_EXISTS。