力为的技术博客

联系 聚合 管理
  154 Posts :: 1 Stories :: 561 Comments :: 0 Trackbacks

 

问题:
有时候用ifstream或ofstream打开带有中文路径的文件会失败。

解决办法:
1、使用C语言的函数设置为中文运行环境
setlocale(LC_ALL,"Chinese-simplified");

2、使用STL函数设置为系统语言环境
std::locale::global(std::locale(""));

当然选2啦!

posted on 2006-06-09 22:01 力为 阅读(13472) 评论(13)  编辑 收藏 引用 所属分类: 4. C++ FAQ5. GP&STL&BOOST

评论

# re: fstream 和 中文路径 2006-06-09 22:21 LOGOS
听君一席话,胜读十年书。
以前用VS2003的时候,用fstream类一直可以很好支持中文文件名的,后来换了VS2005之后,建立中文文件名的文件,文件名字却一直是乱码(wfstream不在此例),内心十分疑惑。
看了你的贴,做了一下测试,所有问题都OK了。  回复  更多评论
  

# re: fstream 和 中文路径 2006-06-09 23:25 LOGOS
做了更多的测试之后,发现ios::imbue方法失效了,要改变语言类别,只能通过locale::global实现。
但是问题却来了,设置global为中文后,cout却丧失了输出中文的能力。。。  回复  更多评论
  

# re: fstream 和 中文路径 2006-06-10 11:13 力为
VC6可以正常输出,
在VC2005下cout不能正常输出,但ofstream可以正常输出。  回复  更多评论
  

# re: fstream 和 中文路径 2006-07-29 23:02 smilerain
就是这个麻烦的问题
fstream能找到中文路径了
cout确不能输出中文了.  回复  更多评论
  

# re: fstream 和 中文路径 2006-08-27 20:38 wuqiu
std::locale::global(std::locale(""));
// open file
std::locale::global(std::locale(0));
  回复  更多评论
  

# re: fstream 和 中文路径 2006-11-08 18:58 Taorama
升级到VS2005,发现很多东西不能用了。跟踪半天,发现是fstream搞得鬼。试了很多办法都无效。
老大提供的方法不错,马上就搞定了。STL学的不好,老大是能解释一下吗。  回复  更多评论
  

# re: fstream 和 中文路径 2006-11-08 20:10 Taorama
“1、使用C语言的函数设置为中文运行环境
setlocale(LC_ALL,"Chinese-simplified");”

这句话应该改为
setlocale(LC_ALL,"");
才对。  回复  更多评论
  

# re: fstream 和 中文路径 2006-11-14 12:02 doermlp
请教楼主,用了上面的方法2之后的确能解决中文路径问题,但是向文件中写入整型或浮点型数据时有问题,比如“1000”,输出之后就成了“1,000”,这个问题能解决吗?谢谢。  回复  更多评论
  

# re: fstream 和 中文路径 2007-07-04 02:19 天津大学计算机学院 常兴龙
很不错!  回复  更多评论
  

# re: fstream 和 中文路径 2007-08-23 11:37 小胡
比如“1000”,输出之后就成了“1,000”,这个问题我也遇到了,文件名也会这样  回复  更多评论
  

# re: fstream 和 中文路径 2007-08-23 11:38 小胡
@小胡
有解决的办法码
  回复  更多评论
  

# re: fstream 和 中文路径 2007-09-15 02:05 lax
@小胡
设置输出流的local为"C"即可,利用imbue()方法。
若输出流对象为a,则
a.imbue(std::locale("C"));
这样就不会出现1,000的现象。
  回复  更多评论
  

# re: fstream 和 中文路径 2008-01-02 19:14 进而人员
谢谢!  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理