代码如下: (为了这个问题,在MSN上少打了一个/引来了。。。。。。,这个死失血^_^)

此代码作用是按行读取一个文件

#include
void test()
{
std::ifstream file("c://我的中文目录//test.txt");
if(!file.is_open())
return FALSE;

while(file.good())
{

char buffer[1024];
file.getline(buffer, 1024);

}
file.close();

}

结果
1.在VC6.0 中结果运行正常

2.在VS .NET 2003 中(没有试过,估计也正常)

3.在vs .net 2005中不正确啦, is_open返回为false了
原因:
跟踪代码发现_Fiopen用的是wchar_t( 我想可能是盖子不想在WIN98下运行了,所以全部支持NT,自然就是wchar_t类型了。)
/*
这段为盖子打开文件的源代码

_MRTIMP2_NCEEPURE FILE *__CLRCALL_PURE_OR_CDECL _Fiopen(const char *filename,
ios_base::openmode mode, int prot)
{ // open wide-named file with byte name
wchar_t wc_name[FILENAME_MAX];


if (mbstowcs_s(NULL, wc_name, FILENAME_MAX, filename, FILENAME_MAX - 1) != 0)
return (0);
return _Fiopen(wc_name, mode, prot);
}
*/
另mbstowcs_s读取的时候_LocaleUpdate.localeinfo (这个与下面要讲的那个函数有关)

解决主法:
1.setlocale(LC_ALL, ""); 设置一下就OK了 //C语言的
2.std::locale::global(std::locale(""); // 标准库

结尾: STL真恼火, 兼容,BUG.(盖子的原因)