unity3D 扫描全盘获取文件路径

来源:互联网 发布:sql默认实例 编辑:程序博客网 时间:2024/05/30 19:33

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



unity3D真好~~~~,尽管我习惯用js写代码了,但是所有c#的函数在js里面都可以用,呵呵~~~~,msdn也很好,谢谢你们~~~~~