std::fstream 中文路径

std::fstream 中文路径

eryar@163.com

用C++来开发管道出图程序IsoAlgo时,当PCF文件名中包含中文时,读取文件会失败。将下面数据存成一个简单文件:中文.txt  放到目标目录中来测试:

wps_clip_image-28291

Figure 1 包含中文的文件

简单测试程序代码如下所示:

#include  < fstream >
#include 
< cassert >
#include 
< iostream >

int  main( int  argc,  char *  argv[])
{
    std::ifstream aFile(argv[
1 ]);

    assert(aFile.good());

    std::cout 
<<  aFile.rdbuf()  <<  std::endl;

    
return   0 ;
}

并在Visual Studio的命令参数中传进去文件名:

wps_clip_image-21877

Figure 2 Set Command Arguments

运行程序,会得到如下错误提示窗口:

wps_clip_image-429

Figure 3 assert for the file

这是加上断言assert的效果,在Debug模式下可以很快定位到错误,而在Release模式下就把这一行代码忽略了。

在网上搜了下std::ifstream读取中文文件名的文件的解决方案:

v 使用C语言的函数设置成中文运行环境:

setlocale(LC_ALL, " Chinese-simplified " );

v 使用STL中的函数设置为系统语言环境:

std::locale::global(std::locale( "" ));

因为IsoAlgo使用了STL的C++,所以选择方案2。实现代码如下所示:

#include  < fstream >
#include 
< cassert >
#include 
< iostream >

int  main( int  argc,  char *  argv[])
{
    std::locale::global(std::locale(
"" ));
    std::ifstream aFile(argv[
1 ]);
    std::locale::global(std::locale(
" C " ));

    assert(aFile.good());

    std::cout 
<<  aFile.rdbuf()  <<  std::endl;

    
return   0 ;
}

程序运行结果如下图所示:

wps_clip_image-11274

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值