我在我的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");
}
它可以打开要写的文件。
我做错了什么?
答案 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
字符串的指针,而不是char
或unsigned char
字符串,如果调用例程也使用{{}} {3}}而不是基本数据类型。