是否可以检查squirrel中目录的内容?我需要一个文件名列表,包括它们在给定目录及其子目录中的路径。
我正在编写一个用于Code :: Blocks的脚本,它使用squirrel作为脚本语言。我看过松鼠标准库,但无法找到任何与文件相关的操作。也可以将此任务外包给外部脚本(bash或其他),但我不想这样做。
答案 0 :(得分:1)
Squirrel没有任何内置的I / O功能。您必须在C ++端编写一个并将该函数公开给Squirrel。
答案 1 :(得分:1)
下载tinydir表格:https://github.com/cxong/tinydir
为squrriel添加系统API:
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
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>