我使用GetFileAttributes來檢查是否存在(標準的「你要替換現有文件」)GetFileAttributes創建文件,並顯示一個對話框,向用戶返回前FILE_ATTRIBUTE_ARCHIVE爲不存在的文件
if (GetFileAttributes(szFilePath) != 0xffffffff) { /* display "do you want to replace?"*/}
有時,它會返回成功的文件,不能可能存在,因爲它將在文件夾中有只是已創建(使用CreateDirectory)。當它發生時,它返回的屬性就是FILE_ATTRIBUTE_ARCHIVE。
任何想法是怎麼回事?
編輯:爲了響應無盡的一系列「你應該使用INVALID_FILE_ATTRIBUTES」,我已經這樣做了。
DWORD dwFile = GetFileAttributes(szFilePath);
if (dwFile != INVALID_FILE_ATTRIBUTES) { /* display "do you want to replace?"*/}
我得到了同樣的結果。對於不存在的文件,dwFile返回FILE_ATTRIBUTE_ARCHIVE。我很確定它不存在。該文件夾只是剛創建。我沒有使用GetTempFileName()。我可以從調試器中複製szFilePath,並使用Explorer和命令行訪問文件夾,但他們都沒有顯示文件存在。
你應該使用'INVALID_FILE_ATTRIBUTES'而不是一個幻數。 –
是的。但是,這仍然不等於FILE_ATTRIBUTE_ARCHIVE。 – jbcarpen
爲什麼不只是忽略這些屬性並嘗試創建文件,並讓它失敗,如果它已經存在? CreateFile()具有CREATE_NEW特性。如果文件已經存在,它會報告一個'ERROR_FILE_EXISTS'錯誤。如果用戶同意覆蓋,則可以使用「CREATE_ALWAYS」配置創建文件。 –