扫描全盘获取文件路径,这一个简单的东西害我做了两天,刚开始先看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){}
}
}