我是新来的,我的英语不是很好。对给您带来的任何不便表示歉意!
我正在使用本机代码(MFC)编写Windows Mobile应用程序。我正在尝试打开一个文件,这让我发疯。我试图以千种不同的方式打开它......我真的实现了它,但是当我尝试阅读(fread
或getline
)时程序崩溃而没有任何解释:
The program 'x' finalize with code 0 (0x0)
在某些情况下,GetLastError()
方法会给我一个183.
然后,我把我用过的代码打开文件:
std::wifstream file(L"\\Archivos de programa\\Prog\\properties.ini");
wchar_t lol[100];
if (file) {
if(!file.eof()) {
file.getline(lol,99);
}
}
它进入所有的if,但是getline崩溃了。
FILE * lol = NULL;
lol = _wfope n(ruta, L"rb");
DWORD a = GetLastError();
if ( lol != NULL )
return 1;
else
return -1;
它返回1(正确),之后,在稍后的getline中,它将垃圾存储在字符串上。但是,它不会崩溃!
fp.open (ruta, ifstream::in);
if ( fp.is_open() ) {
return 1;
}else{
return -1;
}
它进入返回1,但执行后来的getline()崩溃。
我调试了getline()
方法,它在库fstream
上崩溃,就在那里:
if ((_Meta = fget c (_File)) == EOF)
return (false);
在if。 fgetc()
,我嘲笑。
我要疯了!我需要一些线索,请!! 文件的路径是正确的。首先,因为理论上,方法打开文件,其次,我获得了dinamically的路径并匹配。
强调fread
方法也会崩溃。
提前致谢!
P.S .:
假设当我执行任何fopen时,方法fp.good()返回FALSE,GetLastError返回给我183.另一方面,如果我使用fp.fopen(path, ifstream::in);
或std::wifstream fp(path);
{{1} }返回fp.good();
,TRUE
不会抛出任何错误(0)。
答案 0 :(得分:0)
提示:使用Process Monitor工具查看文件系统调用中出现的问题。
wifstream
接受的路径缺少驱动器(“C:”等)(我不知道ruta
变量指向的是什么)
除了流本身问题之外,使用Windows .ini文件时,使用GetProfileString
及相关功能可以省去很多麻烦。
答案 1 :(得分:0)
我在黑暗中拍摄,但你的描述听起来像是一个运行时不匹配的故事。检查MFC和您的项目是否使用相同的运行时链接模型(静态/动态)。如果动态链接到MFC,则限制更严格:MFC和项目都必须使用动态运行时。
答案 2 :(得分:0)
我不知道为什么,但是使用CFile类......它有效......
编程之谜!
答案 3 :(得分:0)
也在黑暗中拍摄。 MFC中无法解释的随机崩溃通常来自不匹配的消息处理程序原型。 例如,以下代码是错误的,但在编译期间不会生成任何警告,并且它可能在大多数情况下都有效:
ON_MESSAGE(WM_LBUTTONDOWN, onClick)
...
void onClick(void) //wrong prototype given the macro used (ON_MESSAGE)
{
//do some stuff
}
这里的原型应该是:
LRESULT onClick(WPARAM, LPARAM)
{
}
当人们有足够的信心开始手动修改消息地图时,通常会发生这种情况。