Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Как понять что рекурсивный обход папок закончился (http://www.flasher.ru/forum/showthread.php?t=174501)

djyamato 26.01.2012 22:20

Как понять что рекурсивный обход папок закончился
 
Вложений: 1
Здраствуйте
Что-то я запутался, подскажите пожалуйста
вот есть у меня структура папок (на скрине)

Хотелось бы получить такой набор:

1.1.foto - список файлов
1.1.txt - список файлов
1.1.video - список файлов
1.2.foto - список файлов
1.1.txt - список файлов
итд

"1.1.foto" - это текстовый ID

Я написал такой код
Код AS3:

protected var dir:File;
 
                        protected var _currentDir:DIR;
 
                        protected var _recurtionDepth:int=4;
 
                        protected var _currentRecurtionDepth:int=0;
 
                        protected function windowedapplication1_applicationCompleteHandler(event:FlexEvent):void
                        {
                                var parentDir:DIR=new DIR("data");
                                _currentDir=parentDir;
                                listDirectory("data",parentDir);
                                trace("recurtion finish "+ObjectUtil.toString(parentDir));
                        }
 
                        protected function listDirectory(dirName:String,dirObject:DIR):void
                        {
                                dir=File.applicationDirectory.resolvePath(dirName);
                                try
                                {
                                        dir.getDirectoryListingAsync();
                                        dir.addEventListener(FileListEvent.DIRECTORY_LISTING, directoryListCompleteHandler);
                                        dir.addEventListener(IOErrorEvent.IO_ERROR,fileIOErrorHandler);
                                }
                                catch(error:Error)
                                {
                                        trace("DIRECTORY DOES NOT EXIST");
                                }
                        }
 
                        private function directoryListCompleteHandler(event : FileListEvent) : void
                        {
                                _currentRecurtionDepth+=1;
                                dir.removeEventListener(FileListEvent.DIRECTORY_LISTING, directoryListCompleteHandler);
                                dir.removeEventListener(IOErrorEvent.IO_ERROR,fileIOErrorHandler);       
 
                                var cont : Array = event.files;
                                var tmpObject:Object;
                                var arr:Array=new Array();
                                var itemsID:String="";
                                for (var i : uint = 0;i<cont.length;i++)
                                {
                                        if(cont[i].isDirectory)
                                        {
                                                var _dir:DIR=new DIR(cont[i].name);
                                                _currentDir.directories.push(_dir);
                                                listDirectory(cont[i].nativePath,_dir);
                                        }
                                        else
                                        {
                                                _currentDir.files.push(cont[i].nativePath);
                                        }
                                }
                        }
 
                        protected function fileIOErrorHandler(event:IOErrorEvent):void
                        {
                                trace("dir does not exists");
                        }

Код AS3:

package VO
{
        public class DIR
        {
 
                protected var _id:String;
                protected var _directories:Vector.<DIR>=new Vector.<DIR>();
                protected var _files:Array=new Array();
 
                public function DIR(id:String,directories:Vector.<DIR>=null,files:Array=null)
                {
                        _id=id;
                        if(directories)
                        {
                                _directories=directories;
                        }
                }
 
                public function get id():String
                {
                        return _id;
                }
 
                public function set directories(val:Vector.<DIR>):void
                {
                        _directories=val;
                }
                public function get directories():Vector.<DIR>
                {
                        return _directories;
                }
 
                public function set files(val:Array):void
                {
                        _files=val;
                }
                public function get files():Array
                {
                        return _files;
                }
 
        }
}

Как мне понять что "просмотр" папки data закончился ?
И вообще, меня терзают смутные сомнения, а не заморочился ли я и возможно, сделать можно гораздо проще ?

HardCoder 26.01.2012 22:52

http://cookbooks.adobe.com/post_Recu...sing-9410.html
Там где строчка
Код AS3:

//it's a file yupeee
fileList.push(files[f].nativePath);

проверяете тип файла и пихаете в соответствующий массив

Genzo 27.01.2012 11:12

http://www.flasher.ru/forum/blog.php?b=497 посмотрите можете, что-то использовать


Часовой пояс GMT +4, время: 14:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.