Справочник рекурса в белке
Можно ли проверить содержимое каталога на белка? Мне нужен список имен файлов, включая их пути, в данном каталоге и его подкаталогах.
Я пишу сценарий для использования в Code::Blocks, который использует белку в качестве языка сценариев. Я взглянул на стандартную библиотеку белка, но не смог найти никаких операций, связанных с файлами. Также возможно передать эту задачу внешнему скрипту (bash или какому-либо другому), но я бы предпочел этого не делать.
2 ответа
Загрузите форму tinydir: https://github.com/cxong/tinydir
Добавьте системный API для squrriel:
static SQInteger _system_getfiles(HSQUIRRELVM v) { const SQChar *dirPath; sq_getstring(v, 2, &dirPath); sq_newarray(v,0); printf("Get dir %s;\r\n", dirPath); tinydir_dir dir; tinydir_open(&dir, dirPath); while (dir.has_next) { tinydir_file file; tinydir_readfile(&dir, &file); // printf("%s\r\n", file.name); // if (file.is_dir) // { // printf("/"); // } // printf("\n"); if (!file.is_dir) { sq_pushstring(v, file.name, -1); sq_arrayappend(v, -2); } tinydir_next(&dir); } tinydir_close(&dir); // sq_newarray(v,0); // sq_pushstring(v, "test_001.c", -1); // sq_arrayappend(v, -2); // sq_pushstring(v, "test_002.c", -1); // sq_arrayappend(v, -2); // sq_pushstring(v, "test_003.c", -1); // sq_arrayappend(v, -2); return 1; } #define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_system_##name,nparams,pmask} static const SQRegFunction systemlib_funcs[]={ _DECL_FUNC(getenv,2,_SC(".s")), _DECL_FUNC(system,2,_SC(".s")), _DECL_FUNC(clock,0,NULL), _DECL_FUNC(time,1,NULL), _DECL_FUNC(date,-1,_SC(".nn")), _DECL_FUNC(remove,2,_SC(".s")), _DECL_FUNC(rename,3,_SC(".ss")), _DECL_FUNC(getfiles,2,_SC(".s")), {NULL,(SQFUNCTION)0,0,NULL} }; #undef _DECL_FUNC
- Результат теста:
sq>local files=getfiles("c:");foreach(file in files){print(file + "\r\n");} Get dir c:; devcon64.exe espacePlugin.log java14224.reg MyProject.smp ns_fp.ocx pagefile.sys ScanResult.log test.log test1.log UpdateDocPermission.log UpdateVMLog.txt UserAgentData.log UserData.log sq>
Белка не имеет встроенных функций ввода / вывода. Вам придется написать один на стороне C++ и представить эту функцию Squirrel.