// Datafile.h
class CDataFile : public CStdioFile
{
public:
CDataFile(void);
~CDataFile(void);
int OpenFile(LPCWSTR FileName);
}
调用OpenFile函数后,FileName变量已损坏。
int CDataFile::OpenFile(LPCWSTR FileName)
{
m_OpenFlags = CFile::modeNoTruncate | CFile::modeReadWrite;
// Before open. FileName = "c:\afile.txt"
if (!Open(FileName, m_OpenFlags, NULL))
{
return GetLastError();
}
//After open. FileName = ""ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮÞÄá¸Ã·á¸Ã·ã¼ ç¢Â"
// other stuff
}
}
但是如果我把文件名改成
WCHAR FileName[] = _T("c:\\afile.txt");
在打开文件之前,变量文件名保持不变。我以前在MFC/Winapi中见过这种行为,并且总是通过使用字符数组而不是LPCWSTR或CString来解决它。为什么会这样?使用VS调试器跟踪此类问题的最佳方法是什么。损坏似乎发生在MFC文件中文件核心.cpp
if (!CFile::Open(lpszFileName, (nOpenFlags & ~typeText), pException))
return FALSE;