在Windows Mobile上使用本机代码读取文件时出错

时间:2009-11-16 11:25:39

标签: c++ windows mfc mobile

我是新来的,我的英语不是很好。对给您带来的任何不便表示歉意!

我正在使用本机代码(MFC)编写Windows Mobile应用程序。我正在尝试打开一个文件,这让我发疯。我试图以千种不同的方式打开它......我真的实现了它,但是当我尝试阅读(freadgetline)时程序崩溃而没有任何解释:

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)。

4 个答案:

答案 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)
{
}

当人们有足够的信心开始手动修改消息地图时,通常会发生这种情况。