我正在尝试通过我的代码创建一个文本文件。文件已创建,但其扩展名不同(不是.txt)。然后在搜索时我发现这可能是因为MFC运行时。
我在C:\ program Files \ Windows CE tools \ SDK中搜索了MFC Runtimes,但我无法在那里找到MFC文件夹。我该怎么办?我应该从哪里加入MFC Runtimes?
这是我正在使用的文本文件生成代码:
void CFormRight::OnBnClickedButtonTextfile()
{
CFile File;
char cFileAddr[100] = {"My Device\\Label.txt"};
File.Open((LPCTSTR)cFileAddr, CFile::modeCreate | CFile::typeBinary |CFile::modeWrite | CFile::shareDenyNone);
File.Write("Hello World", 15);
File.Close();
}
答案 0 :(得分:1)
如果您只是在寻找DLL,请尝试在此处查看您的开发计算机:
%PROGRAM_FILES%\Microsoft Visual Studio 9.0\VC\ce\dll
这可以让你获得实际的库。可以通过多种方式将它们包括在OS映像中。通常,您可以将它们添加到您的平台或项目BIB文件中。
尽管如此,我认为它不会解决您的文件扩展问题。如果您正在创建一个文件并且它显示出来,只是没有扩展名,它与MFC在那里没有任何关系,它与您的代码或您确定没有扩展名的方式有关(在资源管理器中打开“隐藏文件扩展名”?)。要解决这个问题,我们需要查看代码。
**编辑**
Windows CE严重偏向于Unicode。几乎所有Win32 API都只暴露了Unicode变体,因此您的代码也应该倾向于Unicode,这意味着您传递的字符串最终将在API调用时应该是Unicode。
其次,在抱怨时你不应该忽略编译器。你在那里的演员我打赌是由于编译器投诉,这是不正确的。如果您的原始代码是这样(请注意第一个参数缺少强制转换):
File.Open(cFileAddr, CFile::modeCreate | CFile::typeBinary |
CFile::modeWrite | CFile::shareDenyNone);
然后你会得到一个编译器错误:
error C2664: 'CFile::Open' : cannot convert parameter 1 from 'char [100]' to 'LPCTSTR'
那是因为在Windows CE下,Open
正在寻找一个宽(Unicode)字符串。你有一个ANSI字符串。您不能像通过简单的直接转换那样从ANSI转换为Unicode。是的,编译器会退出抱怨,但它会导致不良行为。您也可以将int
投射到char[]
,但这并不意味着它适用于API。
所以改变你的代码以使用宽字符串,一切都会起作用:
CFile File;
CFileException ex;
wchar_t cFileAddr[100] = TEXT("My Device\\Label.txt");
if(!File.Open(cFileAddr, CFile::modeCreate | CFile::typeBinary |
CFile::modeWrite | CFile::shareDenyNone))
{
wchar_t error[1024];
ex.GetErrorMessage(error, 1024);
cout << "Error opening file: ";
cout << error;
return;
}
File.Write("ID Technologies", 15);
File.Close();
请注意wchar_t
的使用,使用TEXT
宏的初始化以及Open
调用中缺少广播。
编辑2
我在上面的代码中添加了错误处理,但实际上你应该学习read the documentation以及如何调试。这是一个非常基本的使用场景,知道如何查找错误至关重要。