扫描全盘获取文件路径,这一个简单的东西害我做了两天,刚开始先看Resources,接着看AssetBundle和WWW,后面我惊奇的看到EditorUtility.OpenFilePanel ,
但是还是不对,最后高手们说c#可以解决这个问题,我就去看c#,先看了file类,后来看到Directory类,终于明白,里面
有Directory.GetFiles(path:String),Directory.GetFiles(path:String,pattern:String)和Directory.GetFiles(path:String,pattern:String,SearchOption)
三种获取路径中的文件路径的方法,第一种和第二种方法都可以运行,但第三种方法可以在电脑上(除了系统盘)以外的盘达到效果,在手机上就不能运行咯~~~~,怎么办了?
没办法,c#中还有一个Directory.GetDirectories(path:String)获取路径中子目录的方法,所以我写了一个递归函数,虽然在系统盘还是不行,但在手机就达到了我想要的效果。
import System.IO; import System.Collections; var www : WWW; var files:String[]; var file:ArrayList; function Start () { file=new ArrayList(); he("/sdcard/","*.png",file); print(file.Count); } function Update(){ if(Input.GetKey(KeyCode.Escape)){ Application.Quit(); } } function OnGUI(){ GUI.Label(Rect(100,100,100,100),file.Count+"----"+files.Length); } function he(path:String,pattern:String,al:ArrayList){//如果al你用String[]的话,会报错,说你的数组不够大,所以我用ArrayList if(path!=null){ var f1:String[]=Directory.GetFiles(path,pattern); for(var f11:String in f1){ al.Add(f11); } var d1:String[]=Directory.GetDirectories(path); for(var d11:String in d1){ var f2:String[]=Directory.GetFiles(d11,pattern); for(var f22:String in f2){ al.Add(f22); } he(d11,pattern,al); } } }
不好意思,以上内容是昨天写的,我在手机上和系统盘好好试了一下还是不行,抛出一个异常,最后我用try-catch就搞定了,以下代码可以运行了:
function he(path:String,pattern:String,al:ArrayList){
if(path!=null){
var f1:String[]=Directory.GetFiles(path,pattern);
var d1:String[];
for(var f11:String in f1){
al.Add(f11);
}
try{
d1=Directory.GetDirectories(path);
for(var d11:String in d1){
try{ he(d11,pattern,al);}
catch(Exception){}
}
}catch(Exception){}
}
}