0

fzip を使用してフォルダーの内容を圧縮しています。フォルダーには 500MB のファイルが 4 つ含まれています。問題は、これがコンピューターのメモリをすべて使用することです。これを防ぐ方法はありますか?メモリを 20% か何かでロックしますか?

これは私のコードです:

public function packageFileParser(filesToZip:Array):void {
            for (var i:uint = 0; i < filesToZip.length; i++) {
                if (filesToZip[i]["isDirectory"] == true) {
                    packageFileParser(filesToZip[i].getDirectoryListing());
                } else {
                    if (filesToZip[i]["isHidden"] == false) {
                        var byteLoader:UrlURLLoader = new UrlURLLoader();
                        byteLoader.dataFormat = URLLoaderDataFormat.BINARY;
                        byteLoader.addEventListener (flash.events.Event.COMPLETE, urlLoaderCompleteHandler);
                        var fileRequest:URLRequest = new URLRequest ("/"+filesToZip[i]["nativePath"]);
                        byteLoader.load (fileRequest);  
                    }
                }
            }
        }


        private function urlLoaderCompleteHandler(event:flash.events.Event):void {
            var saveZip : Function = function(zip : FZip) : void {
                var out : ByteArray = new ByteArray();
                zip.serialize(out);

                var fs : FileStream = new FileStream;
                targetFile = File.desktopDirectory.resolvePath(zipName);
                fs.open(targetFile, FileMode.WRITE);
                fs.writeBytes(out);
                out.clear();
                fs.close();
            };
            var fullpath:String = event.target.urlRequest.url;
            var filename:String = fullpath.substr(fullpath.lastIndexOf("/")+1,fullpath.length);
            var filepath:String = fullpath.substr(0,fullpath.lastIndexOf("/")+1);
            filepath = filepath.split("/Users/Thibaut/Desktop/testfolder").join("");
            zip.addFile(filepath+filename, event.target.data);
            saveZip(zip);
        }
4

1 に答える 1

0

私の知る限り、FZip ライブラリはメモリ内にアーカイブ全体を作成し、それをディスクに保存します。ライブラリを変更する以外にできることはありません。coltware の airxzipを試してみてください。うまくいきました (アーカイブにファイルを追加するときにアーカイブがディスクにフラッシュされるため、大きなアーカイブでも大きなメモリ負荷はなかったと思います)。
また、AIR 機能 (FileStream クラス) を使用している場合は、質問に「air」タグを追加する必要があります。プレーンな AS3 と比べて大きく変わります。

于 2012-05-21T10:18:32.047 に答える