`

[转]vc中ifstream ofstream不能读取带有中文路径

    博客分类:
  • C++
 
阅读更多
转自:http://hi.baidu.com/songshu5555/blog/item/0d4281b47d1a627e8ad4b259.html

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

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

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

当然选2啦!

ofstream writefile;

string filename=("d:\我的文档\测试.txt");

     locale loc = locale::global(locale("")); //要打开的文件路径含中文,设置全局locale为本地环境

     writefile.open(filename.c_str(),ios::out); //打开文件

     locale::global(loc);//恢复全局locale

用locale对象的name方法可以看到,通过locale("")构造出的locale 对象的name为"Chinese_People's Republic of China.936",而原始的locale对象的name为"C",也就是缺省的ANSI_C公约。

注意:如果使用locale loc = locale::global(locale(""))设置全局locale后没有用 locale::global(loc)恢复的话,那么在程序后面的cout语句就不能输出中文了,虽然这时候操作中文文件没有问题,但是这也是很容易让 人掉入陷阱的地方,应该值得注意。解决方法:

先将CString 转为char*

CString str=view->m_sFilePath;
//CString str = "";
//ofstream 中传的参数不能有汉字,必须转换,一下是其暂缓方法
str.AppendFormat("cluster%d%d.txt",aMatrix->X_part,aMatrix->Y_part);
char*   sz   =   str.GetBuffer(str.GetLength());
locale loc = locale::global(locale(""));
ofstream ofile(sz);

转载网友方法:
  /* 方法1,使用_TEXT()宏定义将字符串常量指定为TCHAR*类型 这种情况下必须是unicode下  编译                */
  /* 如果是我,首选此类型                                                 */
  /************************************************************************/
  fstream file;
  file.open(_TEXT("c:\\测试\\测试文本.txt"));
  cout<<file.rdbuf();
  file.close();

  /************************************************************************/
  /* 方法2,使用STL中的locale类的静态方法指定全局locale                   */
  /* 使用该方法以后,cout可能不能正常输出中文,十分蹊跷                    */
  /* 我发现了勉强解决的方法:不要在还原区域设定前用cout或wcout 输出中文   */
  /* 否则后果就是还原区域设定后无法使用cout wcout输出中文                 */
  /************************************************************************/
  locale::global(locale(""));//将全局区域设为操作系统默认区域
  file.open("c:\\测试\\测试文本2.txt");//可以顺利打开文件了
  locale::global(locale("C"));//还原全局区域设定
  cout<<file.rdbuf();
  file.close();

  /************************************************************************/
  /* 方法3,使用C函数setlocale,不能用cout输出中文的问题解决方法同上      */
  /************************************************************************/
  setlocale(LC_ALL,"Chinese-simplified");//设置中文环境
  file.open("c:\\测试\\测试文本3.txt");//可以顺利打开文件了
  setlocale(LC_ALL,"C");//还原
  cout<<file.rdbuf();
  file.close();
}
分享到:
评论

相关推荐

    ofstream ifstream 文件操作

    标题提到了 `ofstream` 和 `ifstream` 的基本用法,这在Visual C++ (VC) 环境中非常常见。`ofstream` 主要用于向文件写入数据,而 `ifstream` 则用于从文件中读取数据。 ### 描述详解:VC中的文件读入读出的基本...

    vc6.0—逐行读取文本文件代码

    在Microsoft Visual C++ 6.0(简称VC6.0)这个经典的开发环境中,程序员经常需要处理文件操作,其中一种常见的任务就是逐行读取文本文件。本文将深入讲解如何在VC6.0中实现这一功能,以及相关的重要知识点。 首先,...

    vc读取txt文件的数据

    有两种主要的方法来实现:使用`ifstream`(输入文件流)进行读取和`ofstream`(输出文件流)进行写入。 1. **打开文件**: 在VC中,你需要创建一个`ifstream`对象并调用其`open()`函数来打开TXT文件。例如: ```...

    C++ ofstream与ifstream详细用法

    在C++中,文件输入输出(I/O)是通过标准库中的stream类及其派生类来实现的,主要涉及到了ofstream和ifstream两个类,用于分别实现从内存到硬盘的写入操作(ofstream),以及从硬盘到内存的读取操作(ifstream)。...

    vc 读取dxf 并写入 老外写的绝对牛逼

    2. **文件I/O操作**:在VC++中,使用`ifstream`和`ofstream`类来读取和写入文件,掌握二进制和文本模式的区别。 3. **数据解析**:解析DXF文件的ASCII文本,可能需要自定义解析器或者利用第三方库如CADLib。 4. **...

    vc 读取txt文件 并按行显示 源码

    在VC++环境中,读取和显示TXT文件的内容是一项常见的任务,尤其在进行文本处理或数据分析时。本篇文章将深入探讨如何使用C++编程语言(在Visual C++环境下)实现这一功能,具体涉及到的知识点包括文件操作、字符串...

    在vc中的文件读取相关内容

    在VC++(Visual C++)开发环境中,进行文件读取是一项基本操作,这对于任何程序员来说都是必不可少的技能。本文将详细讲解在VC++中如何进行文件读取,适合初级学者入门学习。 首先,我们有两种主要的文件读取方式:...

    VC读文本文件

    `ifstream`类用于读取文件,而`ofstream`类用于写入文件。首先,你需要包含这个头文件: ```cpp #include ``` 2. **打开文件**: 使用`ifstream`对象的`open()`函数打开文件。你需要提供文件路径和打开模式,...

    vc读取TXT文件

    在VC++编程环境中,读取TXT文件并根据其中的数据生成曲线是一项常见的任务,尤其是在数据分析和图形可视化中。本文将详细讲解如何实现这个过程,重点包括读取TXT文件、解析数据、保存坐标以及在客户区绘制曲线。 ...

    c++ 读写txt文件和乱码问题解决

    在C++编程中,处理文本文件的读写是常见的任务之一。TXT文件是最简单的文本文件格式,通常用于存储纯文本信息。然而,在处理不同编码格式的TXT文件时,尤其是涉及到UTF-8编码时,可能会遇到乱码问题。下面将详细讨论...

    VC++逐行读取文本文件

    `fstream`类提供了读取和写入文件的能力,包括`ifstream`用于读取文件和`ofstream`用于写入文件。以下是一个简单的示例,展示如何使用`ifstream`逐行读取文本文件: ```cpp #include #include #include int ...

    在vc中读取图像、显示并保存图像

    在VC++环境中,读取、显示以及保存图像是一项常见的任务,尤其在图形用户界面(GUI)应用程序开发中。本教程将详细介绍如何使用VC++和BMP图像格式来实现这一功能。BMP是一种位图文件格式,它直接存储像素数据,非常...

    C++读取txt文本中的矩阵数据 - CSDN博客.zip_C++读取txt_vc++/vc

    在本主题中,我们将深入探讨如何使用C++编程语言从TXT文本文件中读取矩阵数据。C++是一种强大且灵活的编程语言,广泛应用于系统软件、应用软件、游戏引擎、设备驱动程序等领域。在处理科学计算和数据分析时,读取和...

    VC++逐行读取Txt文本文件

    它提供了`ifstream`类用于读取文件,`ofstream`类用于写入文件,以及`fstream`类同时支持读写。要逐行读取TXT文件,我们需要使用`ifstream`。 2. 打开文件:首先,我们需要创建一个`ifstream`对象,并调用其`open()...

    VC两个文件的读入和写出

    在VC语言中,我们可以使用ofstream和ifstream类来实现文件的读取和写入。ofstream类用于文件的写入,而ifstream类用于文件的读取。例如: ```cpp ofstream outfile("f:\\f1.dat",ios::out|ios::in); ifstream in...

    VC.Net 解析文件名、扩展名及文件路径源码.rar

    在VC.NET中,解析文件名、扩展名以及文件路径是一项基本操作,对于任何涉及文件处理的项目都至关重要。本文将详细讲解如何在VC.NET环境下利用C++语言进行这些操作,并结合给定的"VC.Net 解析文件名、扩展名及文件...

    vc文本读取例子

    本示例着重讲解如何使用C++编程语言在VC6.0中实现这一功能,以便读取指定文件夹中的文件,并将内容按特定格式存储到字符串数组中。这个功能在初始化程序、数据载入或日志记录等场景下非常实用。 首先,我们需要包含...

    vc编程实现数据保存到txt文件里,和从txt文件里读取数据

    在VC++编程环境中,将数据保存到TXT文件以及从TXT文件读取数据是常见的操作,尤其是在处理简单文本记录或日志记录时。本教程将详细解释如何实现这一过程。 首先,我们需要了解基本的文件操作概念。在C++(包括VC++...

    VC 源码:操作TXT文本并独立读写存储文件.rar

    在这个“VC 源码:操作TXT文本并独立读写存储文件.rar”中,包含了一个示例项目,它演示了如何在Windows环境下使用C++进行文本文件的读写操作,并且通过窗体界面增强用户体验。 首先,我们来看文件操作的基本概念。...

    VC Txt文件转换为Dat文件.rar

    在VC环境下,文件操作通常涉及到C++标准库中的fstream库,包括ifstream(输入文件流)和ofstream(输出文件流)。在这个例子中,开发者首先会打开TXT文件,逐行读取内容,然后写入到DAT文件中。转换过程中,可能涉及...

Global site tag (gtag.js) - Google Analytics