最初にお断りするのですが、↓のオプションをちゃんと使えばだいたい同じことができます。
https://docs.microsoft.com/ja-jp/dotnet/api/system.io.directory.getfiles?view=netframework-4.8
まぁなんとなくイメージできたから書いてみたかった、という程度の理由で自前実装しました。
public void Main()
{
var root = "Assets/StreamingAssets/";
var paths = new List<string>();
// txt パスをリストに追加する
Action<string> action = (path) =>
{
if (path.EndsWith(".txt")) { paths.Add(path); }
};
CollectPath(root, action);
foreach (var path in paths)
{
// 各パスに対してやりたいこと
Debug.Log(path);
}
}
private void CollectPath(string root, Action<string> action)
{
var dirPaths = Directory.GetDirectories(root);
foreach (var path in dirPaths)
{
// 末尾に \ が付くのを回避(★)
var p = path + "/";
CollectPath(p, action);
}
var filePaths = Directory.GetFiles(root);
foreach (var path in filePaths)
{
action(path);
}
}
root
の値でピンとくる人も多いと思いますが、Unity 用の実装です。
環境が Windows のため何もしないと区切りが \
になってしまうので、★のところで無理やり対処しています。