FLEX: получение размера папки - PullRequest
1 голос
/ 12 января 2010

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

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

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

Tranks

Ответы [ 2 ]

4 голосов
/ 13 января 2010

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

Файловые системы сами по себе не хранят информацию о размере каталога, и единственный способ узнать это - посчитать ее файл за файлом, нет быстрого / простого ярлыка. Итак, вам придется положиться на решение, которое вы опубликовали выше, и, да, оно будет медленным.

1 голос
/ 12 января 2010

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

 var Foldersize:Number = FolderFile.size;

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

        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;
    }

В «Source» вы передаете FolderFile.getDirectoryListing (), что-то вроде этого:

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

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

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

Спасибо

...