Ogre读取中文路径名的文件失败的解决办法

Ogre的文件读取是使用的标准库的io库读取的,众所周知的是,在vs2005是存在着bug的。
因此想要一劳永逸的解决这个办法唯有去修改Ogre的源代码,以下为修改方法:

打开OgreFileSystem.cpp文件,找到FileSystemArchive::open方法,使用以下代码替换之:
DataStreamPtr FileSystemArchive::open(const String& filename) const
    
{
        String full_path 
= concatenate_path(mName, filename);

        
// Use filesystem to determine size 
        
// (quicker than streaming to the end and back)
        struct stat tagStat;
        
int ret = stat(full_path.c_str(), &tagStat);
        assert(ret 
== 0 && "Problem getting file size" );

        
// Always open in binary mode
        static std::vector<wchar_t>    s_wchar_buf((size_t)128);
        size_t lengthUnicode 
= MultiByteToWideChar(CP_ACP, 0, full_path.c_str(), full_path.size(), NULL, 0);
        
if (s_wchar_buf.size() < lengthUnicode + 1)
        
{
            s_wchar_buf.resize(lengthUnicode 
* 2);
        }

        wchar_t
* szUnicode = &s_wchar_buf[0];
        MultiByteToWideChar(CP_ACP, 
0, full_path.c_str(), full_path.size(), szUnicode, lengthUnicode);
        szUnicode[lengthUnicode] 
= 0;
        std::ifstream
* origStream = new std::ifstream();
        origStream
->open(szUnicode, std::ios::in | std::ios::binary);

        
// Should check ensure open succeeded, in case fail for some reason.
        if (origStream->fail())
        
{
            delete origStream;
            OGRE_EXCEPT(Exception::ERR_FILE_NOT_FOUND,
                
"Cannot open file: " + filename,
                
"FileSystemArchive::open");
        }


        
/**//// Construct return stream, tell it to delete on destroy
        FileStreamDataStream* stream = new FileStreamDataStream(filename,
            origStream, tagStat.st_size, 
true);
        
return DataStreamPtr(stream);
    }

posted on 2008-12-09 03:42 杨粼波 阅读(957) 评论(2)  编辑 收藏 引用

Feedback

re: Ogre读取中文路径名的文件失败的解决办法 2010-09-05 19:16
用setlocale(LC_ALL,"Chinese-simplified");就可以了。    
  

re: Ogre读取中文路径名的文件失败的解决办法[未登录] 2010-09-12 00:56
你知道setlocale这个方法的代价有多大么?会带来什么影响么?    
  

转载于:https://www.cnblogs.com/lancidie/archive/2011/04/23/2025572.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

perl调用shell

1 systemperl也可以用system调用shell的命令,它和awk的system一样,返回值也是它调用的命令的退出状态.如果向system传递一个字符串作参数,则perl会调用shell来执行这个命令,在这个字符串内也就不可以有perl 的变量了;如果传递多个字符串作参数,则perl会自己执行这个命令,且可以…

硬盘类型的区分

硬盘接口类型的区分 1.IDE接口 IDE接口硬盘&#xff0c;IDE也称之为ATA接口&#xff0c;是一种比较老的接口硬盘&#xff0c;从刚开始生产至今&#xff0c;共推出了7个不同的版本&#xff0c;分别是&#xff1a;ATA-1 3.3MB/s、ATA-2 16.6MB/S、ATA-3 16.6MB/s、ATA-4 33MB/s…

Linux Software RAID的rebuild速度。

Linux Software RAID的rebuild速度是根据服务器负载情况自动调节的&#xff0c;默认的rebuild比较慢。默认的速度一般如下&#xff1a; [rootx003 ~]# sysctl dev.raid.speed_limit_min dev.raid.speed_limit_min 1000这个默认速度下&#xff0c;Rebuild一块1T的硬盘好好几天时…

bind配置文件解析

bind配置文件解析 bind作为一般的dns服务器的解析服务。 /etc/named.conf #bind的全局配置文件 /etc/named.rfc1912.zones #域配置文件 /var/named/ #存放zone&arpa文件 /var/log/messages #查看配置过程中出错信息 其中named.c…

硬盘结构

作者&#xff1a;Liuweifei 硬盘结构 1.硬盘结构 ​ 硬盘大致由盘片、读写头&#xff08;磁头&#xff09;、马达、底座、电路板等几大项组合而成。 ​ 硬盘的每一个盘片都有两个盘面&#xff0c;即上、下盘面。每个盘面都能利用&#xff0c;都可以存储数据&#xff0c;成为…

tomcat配置多站点

下面关于TOMCAT6.0配置多站点的问题怎么解决&#xff1f; [互联网 Windows ] 收藏 转发至天涯微博 悬赏点数 10 3个回答 夏洛叶 2009-02-08 09:26:30 在F:\Tomcat 6.0\conf\server.xml配置是这样的,想同时启动5个站点, <Host name"bbb" debug"0" appB…

认识和选购极致画质的显示器

作者&#xff1a;Liuweifei 认识和选购极致画质的显示器 显示器是电脑输出数据的主要硬件设备&#xff0c;它是一种电光转换工具&#xff0c;现在市面上的显示器都是LCD&#xff08;Liquid Crystal Display&#xff0c;液晶显示器&#xff09;显示器&#xff0c;它具有无辐射…

面向对象并不是必要的

程序开发并非一定要面向对象不可&#xff0c;面向对象是一种方式&#xff0c;但是不是唯一的方式&#xff0c;这种方式很多时候有用&#xff0c;不代表任何时候都是最高效的&#xff0c;更不是唯一的真理。面向对象将相关的状态属性和操作方法放在一个实体中&#xff0c;起到了…

认识和选购极致的显示器

作者&#xff1a;Liuweifei 3. 显示器面板的主流选择----IPS 显示器面板的类型关系着显示器的响应时间、色彩、可视角度、对比度等重要性能参数&#xff0c;显示器面板还占据了一台显示器成本70%左右&#xff0c;所以显示器面板对于显示器的优劣起着决定性的作用。现在市面上…

线程同步与异步套接字编程

1.利用事件对象来实现线程间的同步 新建一个win32 console application,取名Event,再建一个Event源文件&#xff0c;编辑&#xff1a; #include <iostream.h> #include <windows.h> DWORD WINAPI Fun1Proc(LPVOID lpParameter); DWORD WINAPI Fun2Proc(LPVOID lp…

电脑数据存储工具----光盘驱动器

作者&#xff1a;Liuweifei 电脑数据存储工具----光盘驱动器 光盘驱动器简称光驱&#xff0c;是电脑用来读写光盘内容的设备&#xff0c;也是在台式机和笔记本电脑里比较常见的一个硬件&#xff0c;随着移动存储设备的快速发展&#xff0c;光驱逐渐被其取代。 1. 光驱的类型…

认识和选购显卡

作者&#xff1a;Liuweifei 认识和选购显卡 显卡一般是一块独立的电路板&#xff0c;插在主板上接收由主机发出的控制显示系统工作的指令和显示内容的数字信号&#xff0c;然后通过输出模拟&#xff08;或数字&#xff09;信号控制显示器显示各种字符和图形&#xff0c;它和显…

11.04.30 半夜清晨

好一阵子没来blog了。 没错&#xff0c;间歇性迷茫。 期中考的缘故&#xff0c;两周没碰题。 最近又开始刷usaco&#xff0c;先恢复下手感脑感。 但是&#xff0c;真的是刷题无力。各种无力。 但是呢&#xff0c;哥是不会放弃的&#xff0c;这个不用怀疑。 院科协换届了&#x…

linux输入多行内容至文件

linux输入多行内容至文件 1. 单行写入 [rootcn01 test]# echo "192.168.1.1" >test.txt [rootcn01 test]# cat test.txt 192.168.1.12. 单行追加 [rootcn01 test]# echo "192.168.1.1" >>test.txt [rootcn01 test]# cat test.txt 192.168.1.…

PB-treeview基本属性事件函数

PB-treeview基本属性事件函数编程相关阅读271 评论0 字号&#xff1a;大中小 订阅 2010-11-04 13:43:34Label 项目的标识文字OverlayPictureIndex指定要使用的重叠图片的列表中的图片索引, 该图片显示在正常图片的上边StatePictureIndex 与状态图标列表中某个图标相对…

linux 之sed用法大全

linux 之sed用法大全 sed详细用法 1. sed的作用 sed是Stream Editor&#xff08;流编辑器&#xff09;的缩写&#xff0c;简称流编辑器&#xff1b;主要用来处理文本的。跟awk、grep合起来成为linux三驾马车。 sed是一行一行读取文件内容并按照要求进行处理&#xff0c;把处…

hadoop-0.21.0-eclipse-plugin无法在eclipse中运行解决方案

LINUX下将hadoop-0.21自带的hadoop eclipse plugin放到eclipse dropins目录中无法正常运行&#xff0c;使用eclipse -consolelog 发现找不到hadoop的类&#xff0c;解压hadoop-0.21.0-eclipse-plugin.jar发现META-INF下的MANIFEST.MF文 件中&#xff0c;Bundle-ClassPath写的有…

Linux之grep 命令

Linux之grep 命令 1. grep 简介 [grep] (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&#xff0c;并把匹配的行打印出来。 命令格式&#xff1a;grep […

网络趋势JSP介绍

JSP简介 JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术&#xff0c;它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag)&#xff0c;从而形成JSP文件(*.jsp)。 用J…

linux shell脚本批量创建公钥

linux shell脚本批量创建公钥 为实现对多台服务器部署服务&#xff0c;如果只用交互方式输入密码&#xff0c;耗时耗力&#xff0c;因此必须考虑自动化部署&#xff0c;查询资料发现expect方式可以实现。 一、介绍 expect脚本是Tcl脚本语言的拓展。用来实现自动的交互式任务…