2014-01-28 83 views
-1

我想使用函數CreateFile來創建一個文件,但有些錯誤,我不知道是什麼。 GetLastError()給出錯誤87這是參數不正確,但我找不到哪一個。C++ CreateFile函數錯誤

代碼:

HANDLE Create; 

Create = CreateFile(
     "D:\Test.txt", 
     GENERIC_READ | GENERIC_WRITE, 
     FILE_SHARE_WRITE, 
     NULL, 
     CREATE_ALWAYS | OPEN_ALWAYS, 
     FILE_ATTRIBUTE_NORMAL, 
     NULL); 

if(Create) 
{ 
    cout << "Ok " << GetLastError() << endl; 
} 
else 
{ 
    cout << GetLastError() << endl; 
} 
+2

Escape「D:\ Test.txt」 –

+0

附註:您應該檢查返回的句柄,如:if(Create!= INVALID_HANDLE_VALUE)' –

+0

@JohnnyMopp這不是一個真正的旁註。這非常重要。 –

回答

3

你需要躲避\。所以你應該寫

"D:\\Test.txt" 

爲文件名。

你真的想用FILE_SHARE_WRITE。這賦予他人與您同時寫入文件的權利。我期望看到0這個參數。

您不能合併創建處置標誌。你必須選擇一個和一個。所以替換:

CREATE_ALWAYS | OPEN_ALWAYS 

與任一個或另一個。 documentation在這一點上是明確的:

此參數必須是下列值之一,不能合併。

不要命名您的文件句柄Create。給它一個更有意義的名稱,表明它是一個文件句柄。例如hFile

最重要的是,你的錯誤檢查是錯誤的。測試成功與否:

if (hFile != INVALID_HANDLE_VALUE) 

請仔細閱讀API函數的文檔以發現錯誤報告的方式。在CreateFile的情況下,除0以外的返回值並不意味着成功。

+0

我將文件名更改爲「D://Test.txt」並進行錯誤檢查,但仍未創建文件 – iCoRe

+0

是的。我發現更多的錯誤。我想我現在擁有他們。 –

+0

謝謝,現在工作正常:) – iCoRe