2014-07-11 87 views
0

我在我的C++項目中遇到了fopen問題。 我打開一個二進制文件編寫類似如下:fopen引發無效的參數錯誤

wwBool myClass::Open(char* pFileName) 
{ 
    m_pfileHandle = fopen(pFileName, "wb"); 
} 

pFileName通常包含字符串如.\data\filename.ext。 但是,我得到此代碼中的Invalid Argument錯誤。

如果我手動將文件名中的一個string buffer並將它傳遞給fopen象下面這樣:

wwBool myClass::Open(char* pFileName){ 

    char tempFile[MAX_PATH]; 
    wsprintf(tempFile, "%s", ".\\data\\filename.ext"); 

    m_pfileHandle = fopen(tempFile, "wb"); 
} 

它可以打開文件寫。

我在做什麼錯?

+0

fopen in C++ ??? \ – nobalG

+0

你能發佈一個完整的可編譯的例子嗎? –

+0

它在Windows和C++中。這是一個大型項目,所以不知道如何發佈可編譯的代碼塊。 – Pixelord

回答

1

請仔細閱讀MSDN中的fopen, _wfopen說明。

fopen僅用於編譯時項目未啓用Unicode支持。 fopen會自動替換爲_wfopen,並啓用Unicode支持,這意味着已定義預處理器宏_UNICODE

_wfopen需要一個常量文件名字符串而不是常量字符串。

改變你的代碼

wwBool myClass::Open(char* pFileName) 

wwBool myClass::Open(LPCTSTR pFileName) 

LPCTSTR的說明,請參見Windows Data Types

當然這種變化的調用程序必須通過指針wchar_t字符串而不是charunsigned char字符串,如果調用的程序也使用了Windows Data Types for Strings,而不是基本數據類型是沒有問題的。

+0

您的討論也非常有幫助和相關! – Pixelord

+0

這對我也有幫助。我恨'LPCTSTR',但我想我要麼處理它,要麼轉換它.. – cybermonkey