Resolvido!Segue a solução:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical" backgroundColor="white">
<mx:Script>
<![CDATA[
[Bindable] private var isSearching:Boolean = false;
[Bindable] private var totalFiles:int = 0;
[Bindable] private var currentFile:String = "";
private function searchDir(event:MouseEvent):void {
var file:File = new File();
file.addEventListener(Event.SELECT, dirSelected);
file.browseForDirectory("Select a directory");
function dirSelected(e:Event):void {
trace(file.nativePath);
isSearching = !isSearching;
getFilesInformation(file.nativePath);
isSearching = !isSearching;
}
}
private function getFilesInformation(root:String):void {
var arq:File = new File(root);
arq.addEventListener(FileListEvent.DIRECTORY_LISTING, dirListHandler);
arq.getDirectoryListingAsync();
}
private function dirListHandler(event:FileListEvent):void {
var list:Array = event.files;
for (var i:int = 0; i < list.length; i++){
var file:File = new File(list[i].nativePath);
trace(file.nativePath);
if (file.isDirectory){
getFilesInformation(file.nativePath);
trace("is dir");
} else {
totalFiles++;
currentFile = file.nativePath;
trace(file.name + " size: " + file.size);
}
}
}
]]>
</mx:Script>
<mx:Button click="searchDir(event)" label="Choose Dir" />
<mx:Label text="{currentFile}" width="200"/>
<mx:Label text="{String(totalFiles)}" />
<mx:ProgressBar indeterminate="true" visible="{isSearching}"/>
</mx:WindowedApplication>
Abraço
2009/6/5 Arian Pasquali <[email protected]>
> voce está utilizando o método sincrono. Em uma linguagem com suporte a
> threads voce poderia criar uma thread extra para ler o arquivo enquanto
> mostrar o progresso na thread principal. lembra que o flash não tem suporte
> a threads.
> flash nao suporta threads, mas no Air a api de files do Air tem umas
> metodos especificos para trabalhar de forma assincrona.
>
> de uma olhada nesse capitulo da documentação do air 1.5 e veja se voce
> encontra o que voce precisa.
> chapter 17
> topic - Asynchronous programming and the events generated by a FileStream
> object opened asynchronously
>
> http://help.adobe.com/en_US/AIR/1.5/devappsflex/devappsflex.pdf
>
> abs
>
> Arian Pasquali
> SCJP, ACE Flex 3 with AIR
> http://arianpasquali.wordpress.com/
> http://twitter.com/arianpasquali
>
> 2009/6/5 Thief <[email protected]>
>
> Olá pessoal,
>> estava fazendo uns testes com o AIR para um trabalho da faculdade, ai
>> criei um protótipo só para simular o problema.
>> Ao ler os arquivos, queria que mostrasse o progresso.
>> Mas ao começar a ler os diretórios recursivamente, ele trava a aplicação e
>> só destrava quando acaba de ler.
>> Alguém tem alguma sugestão?
>>
>> Segue um snippet.
>>
>> Att,
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
>> layout="vertical"
>> backgroundColor="white">
>> <mx:Script>
>> <![CDATA[
>> import mx.effects.Pause;
>> import mx.utils.ObjectUtil;
>> [Bindable] private var isSearching:Boolean = false;
>> [Bindable] private var currentFile:String = "";
>> private function searchDir(event:MouseEvent):void {
>> var file:File = new File();
>> file.addEventListener(Event.SELECT, dirSelected);
>> file.browseForDirectory("Select a directory");
>> function dirSelected(e:Event):void {
>> trace(file.nativePath);
>> isSearching = !isSearching;
>> getFilesInformation(file.nativePath);
>> currentFile = "";
>> isSearching = !isSearching;
>> }
>> }
>> private function getFilesInformation(root:String):void {
>> var arq:File = new File(root);
>> var list:Array = arq.getDirectoryListing();
>> for (var i:int = 0; i < list.length; i++){
>> var file:File = new File(list[i].nativePath);
>> trace(file.nativePath);
>> if (file.isDirectory){
>> getFilesInformation(file.nativePath);
>> trace("is dir");
>> } else {
>> currentFile = file.nativePath;
>> trace(file.name + " size: " + file.size);
>> }
>> }
>> }
>> ]]>
>> </mx:Script>
>> <mx:Button click="searchDir(event)" label="Choose Dir" />
>> <mx:Label text="{currentFile}" />
>> <mx:ProgressBar indeterminate="true" visible="{isSearching}"/>
>> </mx:WindowedApplication>
>>
>>
>>
>>
>
>
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---