Chinaunix首页 | 论坛 | 博客
  • 博客访问: 988501
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-20 11:18:07

无法以二进制方式打开文件名中含中文字符的文件。

VS版本 Version 8.0.50727.42 (RTM.050727-4200)
操作系统 Windows XP Professional 英文版


附上M$的“Bug Report”地址:
只是附一下而已,没别的意思,因为今天论坛上有人想了解如何反馈bug。
我希望所有人发现bug都不反馈给M$,嘿嘿。
阅读(2096) | 评论(15) | 转发(0) |
给主人留下些什么吧!~~

网友评论2012-11-20 11:20:34

abao++
我试过用
//setlocale(LC_ALL,"Chinese-simplified");
//std::locale::global(std::locale(""));  
//std::locale::global(std::locale(0));  
结果都无效.
而我另一个函数,打开一个mp3文件读取id3标签却可以成功,应该说是具有不稳定性,觉得应该是格bug.

网友评论2012-11-20 11:20:26

Zhuyie
应该是你程序中文件路径字符串的编码方式与系统Codepage不一致导致的。

网友评论2012-11-20 11:20:17

Bennie
觉得这算不上Bug,而是因为我们平常的一些假设不正确。
对于multibyte来说,C库相当于程序开始时有如下设定
setlocale ( LC_ALL, "C" );
可参见《C99》的7.11.1.4和MSDN的相关说明。
所以,当你使用其他代码页的multibtye时,必须设定到对应的代码页以保证可以正确转换。

VC6可以是因为fstream直接调用了fopen,fopen可能直接调用了CreateFile,而CreateFile是依赖系统设定的代码页来转换字符的。所以只能算是凑巧。而VC8则使用mbstowcs函数。

这正如你没有设定locale而使用了mbstowcs来转换中文一样不能得到正确的结果,但是你不能说这是MS的BUG。

网友评论2012-11-20 11:20:09

天爬爬
我的blog上前两天刚刚讲了这个问题的解决方法,也是才发现
http://www.cppblog.com/danoyang/archive/2006/05/23/7523.html

网友评论2012-11-20 11:20:02

kevin
学MFC之前,建议你先看《programming in windows》(windows程序设计》