0

我正在使用 fzip 压缩文件夹的内容。该文件夹包含 4 个 500MB 的文件,问题是这使用了我所有的计算机内存。有没有办法防止这种情况?并将内存锁定在 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

AFAIK,FZip 库在内存中创建整个存档,然后将其保存到磁盘。除了更改库之外,您无能为力。试试coltware的 airxzip,它对我很有帮助(我认为即使在大型存档上也没有大的内存负载,因为它们在向它们添加文件时被刷新到磁盘。)
另外,如果您使用的是 AIR 功能(FileStream 类),您应该在问题中添加“air”标签,与普通 AS3 相比,它发生了很大变化。

于 2012-05-21T10:18:32.047 回答