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,一经查实,立即删除!

相关文章

硬盘类型的区分

硬盘接口类型的区分 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…

bind配置文件解析

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

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…

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

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;它和显…

多媒体融合通信平台促进公网和专网的互联互通

在发生诸如地震、洪涝灾害以及极端天气的情况下&#xff0c;由于通信设施和电力设施最容易遭到破坏&#xff0c;因此&#xff0c;在进行应急救援时&#xff0c;相关指挥部门最先想到的就是进行相应设施的抢修。 公网抢修成功&#xff0c;所有相关抢险救灾者都可以实现互相通话&…

ECMAScript 的未来:预测 JavaScript 创新的下一个浪潮

以下是简单概括关于JavaScript知识点以及一些目前比较流行的比如&#xff1a;es6 想要系统学习&#xff1a; 大家有关于JavaScript知识点不知道可以去 &#x1f389;博客主页&#xff1a;阿猫的故乡 &#x1f389;系列专栏&#xff1a;JavaScript专题栏 &#x1f389;ajax专栏&…

利用Visio 2007图形化项目进度和项目跟踪

课程类型 Microsoft Office Visio 2007 视频时长 120分钟 播放 课程资料 课程简介&#xff1a; 在进行项目管理时&#xff0c;项目经理将使用Microsoft Project对项目进行规划、资源分配、成本控制和项目状态跟踪。但是&#xff0c;项目中的数据如何能够通过更图形化的方式呈…

VRP 的发展

随着网络技术和应用的飞速发展&#xff0c;VRP 平台在处理机制、业务能力、产品支持等方面也在持续演进。由于平时也接触到了这几个版本的平台&#xff0c;也常不知道所以然&#xff0c;特找了些资料整理了一下。主要列举了VRP 发展历程中的几个主要版本。 VRP 发展历程 各版本…

PHP学习——定界符格式引起的错误

下面是一个错误的代码&#xff0c;能看出哪里出错了么&#xff1f;&#xff1f;对于我这个初学者什么都是蒙蒙懂的&#xff0c;真的无从下手&#xff0c;但是真的要自己尝试了才知道哪里错了&#xff0c;书和教程都不会告诉我哪里错了 错误代码&#xff1a;Parse error: syntax…

PHP之数组学习

对于网页编程来说&#xff0c;最重要的就是存取和读写数据了。存储方式可能有很多种&#xff0c;可以是字符串、数组、文件的形式等&#xff0c;今天学习了数组&#xff0c;可以说是PHP的数据应用中较重要的一种方式。PHP的数组函数众多&#xff0c;下面是我学习的小结&#xf…

mysql Error 1045(28000)

2019独角兽企业重金招聘Python工程师标准>>> 在windows操作系统安装mysql数据库&#xff0c;碰到Error 1045(28000) Access Denied for user rootlocalhost (Using password:NO)错误时&#xff0c;你需要重新设置密码。 具体方法是&#xff1a; 1.先在安装目录找到m…

给你的博客添加个看电影的频道

PPTV新推出一个Silverlight版PPTV在线剧场&#xff0c;里面电影电视剧和PPTV 软件端同步&#xff0c;只需安装Silverlight软件&#xff0c;即可在线观看。PPTV剧场版网址 为COOL.PPTV.COM &#xff0c;使用iframe代码&#xff0c;嵌入到页面中&#xff0c;给博客网站增加 一个在…

正则表达式生成器

对正则表达式很头疼&#xff0c;是不是&#xff1f;每次看到都觉得像看天书似的&#xff0c;别说让人自己整一个出来了。下面这个网站可以帮你生成正则表达式&#xff0c;而且还可以根据不同的语言生成不同的代码示例&#xff0c;很强大。 http://www.txt2re.com/index.php3 打…

关于面试与被面试

2019独角兽企业重金招聘Python工程师标准>>> 换位思考--开始思考自己&#xff0c;思考他人。缘由是一位刚刚进来没几天的新同事离职了。 首先一个大的前提是&#xff1a;面试是一个双向选择的过程。 假如自己去面试的情况&#xff1a; 1. 对自己的方向有明确的认识&…

淘宝山寨IOS sdk

SDK分享——欢迎大家互助分享2/253 慧修店铺发表于 2011-03-24 16:29iOS的SDK 基于iOS开发的朋友&#xff0c;可以参考iOS的SDK&#xff0c;感谢北京天籁传音数字技术有限公司的杨子刚为大家分享。下载地址&#xff1a;http://download.taobaocdn.com/mtop/release/ApiDemo(ip…

VDI序曲二十七 IE7,IE8,IE9应用程序虚拟化

大家一定很期待我们如果要同时可以打开IE7,IE8,IE9怎么实现对吧&#xff1f; 那好&#xff0c;我就给大家讲下我们的VDI解决方案怎么实现这4种IE9怎么并存打开吧 今天我就讲IE7,IE8,IE9怎么做 我这以IE7为例&#xff1a; 我们用Hyper-V创建虚拟机RDIE7-SRV&#xff0c;系统是Wi…

面板Ext.Panel使用

概要1、Ext.Panel概述2、面板的五大组成部分3、面板的特点4、面板中的内容5、面板内容动态控制6、API概述1、Ext.Panel概述面板Panel是ExtJS控件的基础&#xff0c;很多高级控件都是在面板的基础上扩展的&#xff0c;还有其它大多数控件也都直接或间接与它有关系。应用程序的界…

matlab彩色图像缩放(双线性与双立方插值)

双线性插值原理可以参考这篇博文&#xff1a;双线性内插法 立方插值的推导我参考的这篇文章&#xff1a;Cubic interpolation 数学推导过程上面两篇文章解释得还是比较清楚&#xff0c;可以自己拿笔推一推&#xff0c;至于双线性和双立方可以理解为先行&#xff08;或列&#x…