Haxe sys目标平台如何无需调用Process列出文件夹内文件与目录
在Haxe sys平台列出目录下所有文件与目录
当然可以!Haxe的sys平台原生就支持目录遍历,完全不用去调用ls或dir命令再解析输出——sys标准库提供了专门的API来搞定这件事,简单又可靠。
基础用法:列出目录下所有条目
下面是一个完整的示例,它会遍历指定目录,打印出所有文件和子目录的路径,还能区分类型:
import sys.io.FileSystem; import sys.FileSystem as FS; // 用别名让代码更简洁 class DirectoryLister { static function main() { // 替换成你要遍历的目标目录路径 var targetDir = "./test_dir"; // 先检查目录是否有效,避免运行报错 if (!FS.exists(targetDir) || !FS.isDirectory(targetDir)) { trace("指定路径不存在或不是目录!"); return; } // 获取目录下的所有条目名称(仅文件名/目录名,不含完整路径) var entries = FileSystem.readDirectory(targetDir); for (entry in entries) { // 拼接完整路径 var fullPath = targetDir + FS.separator + entry; // 判断当前条目是文件还是目录 if (FS.isDirectory(fullPath)) { trace("目录: " + fullPath); } else { trace("文件: " + fullPath); } } } }
进阶:递归遍历所有子目录
如果需要深度遍历所有子目录里的内容,可以写个递归函数实现:
import sys.io.FileSystem; import sys.FileSystem as FS; class RecursiveDirectoryLister { static function main() { var targetDir = "./test_dir"; if (!FS.exists(targetDir) || !FS.isDirectory(targetDir)) { trace("指定路径不存在或不是目录!"); return; } listDirectoryRecursive(targetDir); } static function listDirectoryRecursive(dir:String) { var entries = FileSystem.readDirectory(dir); for (entry in entries) { var fullPath = dir + FS.separator + entry; if (FS.isDirectory(fullPath)) { trace("目录: " + fullPath); // 递归遍历当前子目录 listDirectoryRecursive(fullPath); } else { trace("文件: " + fullPath); } } } }
几个实用提示
- 上述代码仅适用于sys目标平台(比如C++、C#、Java、Python、Node.js等),因为sys模块是平台相关的,Flash、浏览器端JavaScript等非sys目标无法使用。
- 路径拼接时用
FS.separator代替硬编码的/或\,能自动适配Windows和类Unix系统的路径分隔符,避免跨平台问题。 - 如果需要获取文件的详细属性(比如大小、修改时间),可以调用
sys.io.FileSystem.stat(fullPath),它会返回一个sys.io.FileStat对象,包含这些信息。
内容的提问来源于stack exchange,提问作者quant
相关产品推荐
相关产品推荐

