cocos3——5.js获取文件夹下文件列表
1.C++:
#include <iostream> #include <fstream> #include <vector> #include <string> #include "cocos2d.h" #if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 #include <windows.h> #include <strsafe.h> #else #include <dirent.h> #endif namespace fs { int readDir( const char *path, vector<string> &names ) { names.clear(); #if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 WIN32_FIND_DATAA ffd; //LARGE_INTEGER filesize; string szDir; //size_t length_of_arg; HANDLE hFind = INVALID_HANDLE_VALUE; DWORD dwError=0; string strDir = path; szDir = strDir + "\\*"; hFind = FindFirstFileA(szDir.c_str(), &ffd); if (INVALID_HANDLE_VALUE == hFind) { //CCLOGWARN("get file name error", path); return 0; } do { if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { string filename=ffd.cFileName;//(const char*) //string filedir=strDir+"\\"+filename; string filedir = filename; names.push_back(filedir); } }while (FindNextFileA(hFind, &ffd) != 0); dwError = GetLastError(); if (dwError != ERROR_NO_MORE_FILES) { //CCLOGWARN("FindFirstFile error", path); return 0; } FindClose(hFind); #else DIR *dp = opendir(path); if (!dp) { //CCLOGWARN("open dir error: %s.", path); return 0; } struct dirent *dirp = readdir(dp); while (dirp) { if (!strcmp(dirp->d_name,".") || !strcmp(dirp->d_name,"..")) continue; names.push_back(dirp->d_name); } closedir(dp); sort(names.begin(), names.end()); #endif return names.size(); } }
2.绑定js:
bool js_fs_readDir(JSContext *cx, uint32_t argc, jsval *vp) { if (argc == 1) { // get the native object from the second object to the first object jsval *argv = JS_ARGV(cx, vp); string path; jsval_to_std_string(cx, argv[0], &path); vector<string> names; fs::readDir(path.c_str(), names); jsval jsret = JSVAL_NULL; jsret = std_vector_string_to_jsval(cx, names); JS_SET_RVAL(cx, vp, jsret); return true; } return false; }
3.js调用:
var files = fs.readdir(full_path);PS: 这里要传全路径,貌似android要把文件拷到可写路径去才能获取到文件列表。。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。