2010-01-12 3 views
1

Я triying, чтобы получить размер папки, выполнив:FLEX: получение размер папки

var FolderFile:File = new File("file:///SomePath/Folder"); 
var FolderSize: FolderFile.size; 

Но это дает мне значение 0, то как я могу получить размер папки? Есть какой-либо способ сделать это?

Tranks

+1

Что вы ожидаете от второй линии? –

+0

Что вы подразумеваете под размер папки. Это размер папки, такой как 10 МБ или количество элементов в папке? – Treby

+0

Проверьте свой синтаксис - ваша вторая строка должна, вероятно, читать var FolderSize: Number = FolderFile.size. –

ответ

4

Нет, нет никакого способа сделать это автоматически. Получение размера каталога является сложной и потенциально болезненно медленной операцией. В каталоге может быть 10 тысяч файлов, или каталог может быть расположен в сети (медленной?), Не говоря уже о ленточном хранилище и подобных сценариях.

В самих файловых системах информация о размере каталога не хранится, и единственный способ узнать его - рассчитать его по-файлу, нет быстрого или простого ярлыка. Таким образом, вам придется полагаться на решение, которое вы указали выше, и, да, оно будет медленным.

+0

Верьте этому гл. Вы можете видеть, что такое же ограничение относится и к самой ОС - для получения максимального размера моей папки c: \ windows требуется winXP около 30 секунд. – fenomas

+0

Хорошо, спасибо за ваше время :). Я собираюсь использовать решение, которое я разместил выше. Tranks снова – Edward

1

Я хочу знать размер папки (например, 10mb). К сожалению, вторая линия, я пишу это неправильно, это:

var Foldersize:Number = FolderFile.size; 

Я только что сделал новый класс Wich выполняет эту функцию:

 public function GetFolderSize(Source:Array):Number 
    { 
     var TotalSizeInteger:Number = new Number(); 
     for(var i:int = 0;i<Source.length;i++){ 
      if(Source[i].isDirectory){ 
       TotalSizeInteger += this.GetFoldersize(Source[i].getDirectoryListing()); 
      } 
      else{ 
       TotalSizeInteger += Source[i].size; 
      } 
     } 
     return TotalSizeInteger; 
    } 

В «Источнике» вы передаете FolderFile.getDirectoryListing() , что-то вроде этого:

var CC:CustomClass = new CustomClass(); 
var FolderSize:Number = CustomClass.GetFolderSize(FolderFile.getDirectoryListing()); 

Но это очень медленный метод, есть более быстрый и простой способ узнать размер папки?

Извините за свою грамматику, я просто изучаю английский.

Благодаря