援引:http://blog.csdn.net/zhanghefu/article/details/21284323
http://blog.csdn.net/cxf7394373/article/details/7195661
先看一下用法:
别忘了引入头文件。 这里我是得到 UserDatas 文件夹下的全部 .json 文件的名字 并转成UTF-8
#include "MyFileUtils.h" #include "IconvString.h" MyFileUtils fileUtil=MyFileUtils(); vector<string> fileNames= fileUtil.getUserDataFilesName(); vector<string> fileNamesConverted; for (int j=0;j<fileNames.size();j++){ fileNamesConverted.push_back( gb2utf( fileNames[j].c_str() ) ); }
MyFileUtils.h 文件,直接在.h文件里实现 功能:读取指定文件夹下的文件名称。
#ifndef __MYFILEUTILS_H__ #define __MYFILEUTILS_H__ #include "cocos2d.h" #include "io.h" #include "iostream" #include "vector" USING_NS_CC; using namespace std; class MyFileUtils { public: vector<string> getUserDataFilesName(){//我自己的封装 string str=CCFileUtils::sharedFileUtils()->fullPathForFilename("UserDatas"); getJsonFilesName(str.c_str(),files); return files; } void getFiles( string path, vector<string>& files ) //通用代码 { //文件句柄 long hFile = 0; //文件信息 struct _finddata_t fileinfo; string p; if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1) { do { //假设是文件夹,迭代之 //假设不是,增加列表 if((fileinfo.attrib & _A_SUBDIR)) { if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0) getFiles( p.assign(path).append("\\").append(fileinfo.name), files ); } else { files.push_back(p.assign(path).append("\\").append(fileinfo.name) ); } }while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } } void getJsonFilesName( string path, vector<string>& files )//我自己的封装 { long hFile = 0; struct _finddata_t fileinfo; string p; if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1) { do { string str=fileinfo.name; if (str.find(".json")!=-1) { files.push_back( fileinfo.name ) ; } }while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } } protected: private: vector<string> files; }; #endif
注意头文件的引入,每一个人可能不一样
#ifndef ICONV_STRING_H #define ICONV_STRING_H #include <string> #include "iconv/iconv.h" //通用代码 int code_convert(const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen); std::string utf2gb(const char *inbuf); std::string gb2utf(const char *inbuf); #endif
</pre><pre code_snippet_id="316364" snippet_file_name="blog_20140428_6_4985379" name="code" class="cpp">//IconvString.cpp 实现
#include "IconvString.h" int code_convert(const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen) { iconv_t cd; const char *temp = inbuf; const char **pin = &temp; char **pout = &outbuf; memset(outbuf,0,outlen); cd = iconv_open(to_charset,from_charset); if(cd==0) return -1; if(iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1; iconv_close(cd); return 0; } /*UTF8转为GB2312*/ std::string utf2gb(const char *inbuf) { size_t inlen = strlen(inbuf); char * outbuf = new char[inlen * 2 + 2]; std::string strRet; if(code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, inlen * 2 + 2) == 0) { strRet = outbuf; } delete [] outbuf; return strRet; } /*GB2312转为UTF8*/ std::string gb2utf(const char *inbuf) { size_t inlen = strlen(inbuf); char * outbuf = new char[inlen * 2 + 2]; std::string strRet; if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 + 2) == 0) { strRet = outbuf; } delete [] outbuf; return strRet; }