fopen throw无效参数错误

时间:2014-07-11 06:35:32

标签: c++ windows fopen

我在我的C ++项目中遇到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");
 }

它可以打开要写的文件。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

仔细阅读MSDN中的fopen, _wfopen解释。

fopen仅用于在编译时未启用Unicode支持的项目。 fopen会自动替换为启用了Unicode支持的_wfopen,这意味着已定义预处理器宏_UNICODE

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

更改代码

wwBool myClass::Open(char* pFileName)

wwBool myClass::Open(LPCTSTR pFileName)

有关 LPCTSTR 的说明,请参阅Windows Data Types

当然,通过此更改,调用例程必须传递指向wchar_t字符串的指针,而不是charunsigned char字符串,如果调用例程也使用{{}} {3}}而不是基本数据类型。