示例#1
0
        private void CollectFiles(DirectoryInfo dir)
        {
            FileCollection fileCollection = FileCollection.Load(dir);

            foreach (FileItem fileItem in fileCollection)
            {
                fileItem.Dir = dir;
                // _files.Add(fileItem);
            }
            _files.AddRange(fileCollection);
            _processFiles += fileCollection.Count;
            Notify(new ProgressEventArgs(_processFiles, _totalFiles));
        }
示例#2
0
 private void UpdateIndex(DirectoryInfo dir)
 {
     try
     {
         Notify(new StatusEventArgs("重建目录索引 {0} ...", new object[] { dir.FullName }));
         FileInfo[]     files          = GetFiles(dir);
         FileCollection fileCollection = FileCollection.Load(dir);
         foreach (FileInfo fi in files)
         {
             FileItem fileItem1 = fileCollection.GetItem(fi.Name);
             if (fileItem1 == null)
             {
                 Notify(new StatusEventArgs("读取文件: {0}", fi.FullName));
                 FileItem fileItem2 = FileItem.Load(fi);
                 if (fileItem2 != null)
                 {
                     fileCollection.AddItem(fileItem2);
                 }
             }
             else if (fileItem1.IsChanged(fi))
             {
                 Notify(new StatusEventArgs("读取文件: {0}", fi.FullName));
                 FileItem updateItem = FileItem.Load(fi);
                 if (updateItem != null)
                 {
                     fileCollection.UpdateItem(updateItem);
                 }
             }
         }
         foreach (FileItem fileItem in fileCollection.Where(it => FileNotExist(files, it)).ToArray())
         {
             fileCollection.RemoveItem(fileItem);
         }
         if (fileCollection.IsChanged)
         {
             fileCollection.Save(dir);
         }
         Interlocked.Add(ref _processFiles, files.Length);
         Notify(new ProgressEventArgs(_processFiles, _totalFiles));
     }
     catch (Exception exp)
     {
         Console.WriteLine(exp.Message);
     }
 }
示例#3
0
    public static void Main(string[] args)
    {
        HashSet <uint>            paths = new HashSet <uint>();
        Dictionary <uint, string> bones = new Dictionary <uint, string>();

        foreach (var dir in args)
        {
            foreach (var fn in Directory.GetFiles(dir, "*.unity3d", SearchOption.TopDirectoryOnly))
            {
                var coll = new FileCollection();
                coll.Load(fn);
                foreach (var asset in coll.FetchAssets())
                {
                    var clip   = asset as AnimationClip;
                    var avatar = asset as Avatar;
                    if (clip != null)
                    {
                        foreach (var binding in clip.ClipBindingConstant.GenericBindings)
                        {
                            paths.Add(binding.Path);
                        }
                    }
                    if (avatar != null)
                    {
                        foreach (var kv in avatar.m_TOS)
                        {
                            bones[kv.Key] = kv.Value;
                        }
                    }
                }
            }
        }
        foreach (var pathid in paths)
        {
            if (bones.TryGetValue(pathid, out string path))
            {
                print($"{pathid} {path}");
            }
            else
            {
                print($"Unresolved {pathid}");
            }
        }
    }