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);
    }

时间: 2024-09-22 01:52:33

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

php上传大文件失败的解决办法

昨天一做php开发的网友问我为什么上传大文件总是失败,但是上传小文件就没有问题.作者一时半会儿也不知道什么原因,遂网上搜搜帮其分析原因,看到一篇很不错的关于php上传大文件失败的各种原因的总结以及各种解决办法的,于是转来与大家分享之.    下面分别是各种原因以及解决办法 (1)文件上传时存放文件的临时目录必须是开启的并且是 PHP 进程所有者用户可写的目录.如果未指定则 PHP 使用系统默认值. php.ini文件中upload_tmp_dir用来说明PHP上传的文件放置的临时目录,要想上传文

PhpMyAdmin 导入sql文件失败的解决办法

php教程myadmin中无法导入sql文件的解决办法 我直接用phpmyadmin导入出现如下提示错误 warning: cannot modify header information - headers already sent by (output started at /usr/local/cpanel/base/3rdparty/phpmyadmin/export.php:190) in /usr/local/cpanel/base/3rdparty/phpmyadmin/libra

svn-SVN中文路径提交文件失败

问题描述 SVN中文路径提交文件失败 大牛们,帮忙解决一下? 现象:用SVN提交文件,路径包含中文,用台式机提交的时候失败,可是用笔记本提交却可以提交成功. 解决方案 那就不要用中文路径不就行了吗

爱思助手其他工具列表读取失败的解决办法

1.点击右上角最小化旁边的三横,在展开选项选择"软件设置". 列表读取失败的解决办法-爱思助手读取开机密码"> 2.在弹出框上方选择"代理设置",然后选择需要使用的代理类型(支持http代理.socks代理和IE代理). 3.然后输入代理地址和端口,如果有账号密码则需要输入账号和密码. 4.输入完成之后点击"测试"来测试代理是否可用.如果可用直接点击保存即可,如果不可用则需要换一个 5.设置完代理之后点击刷新,或者关闭爱思助手重新

在Jsp程序读取或向DB写入数据乱码解决办法

js|程序|解决|数据 在Jsp程序读取或向DB写入数据乱码解决办法 在基于JAVA的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号.这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题.以前我也经常为这个问题而苦恼,后来经查了些资料,终于解决了,我知道一定有很多朋友也会碰到这个问题,所以特就总结了一下,来拿出来让大家一起分享了.1.在网页中输出中文.JAVA在网络传输中使用的编码是"ISO-8859

Wallpaper Engine上传壁纸失败的解决办法

  Wallpaper Engine上传壁纸失败怎么办            解决办法   上传自制的壁纸时一直显示(when upload my own wallpaper,my screen display) "submitting workshop item,processing configuration 进度条25%" 以及上传截图失败等问题的解决方法. 这个问题出现是因为网络与Steam连接不好导致的(长城之类的很容易出现),建议更换网络(拷贝文件到其他网络下去上传),或者

WinXP系统安装字体失败的解决办法

  WinXP系统安装字体失败的解决办法          第一步:给C:WINDOWSFonts文件夹添加"只读"."系统"两大属性,方法如下:开始->打开->输入cmd->点确定->输入cd /d C:WINDOWS 进入windows目录下->接着输入attrib +s +h +r Fonts.这时查看一下,Fonts文件夹是否出现了如下图1的情况,如果出现了,则表示已经修复好了,否则继续第二步. 第二步,检查有没有C:WINDO

求大神告知eclipse中关联library失败的解决办法

问题描述 求大神告知eclipse中关联library失败的解决办法 想实现一个Tab,想导入TabPageIndicartor的library,但老是错误,查了资料说是盘符错误,但还是不知道怎么操做,错误如图. 解决方案 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0522/1265.html 解决方案二: 谢谢回答.这个问题我已经解决了,只需要将library导入时,勾选将library文件同时复制到wordplace

Android SDK更新失败及其解决办法

Android SDK更新失败及其解决办法 最近在网上看Moto 360的图片,真是帅,帅了又帅,比帅更帅.所以想研究下Android wear. 更新Android SDK,居然失败了三次. 1.第一次失败 出现Failed to fetch URL错误提示 Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-6.xml, reason: Connection to https://dl-ssl