File.load()似乎随机地崩溃了程序

时间:2013-06-05 07:27:28

标签: actionscript-3 flex

我的程序有一个导出/导入功能,使用AS3Commons3-zip在程序中制作一些内容(图片,小视频,小pdf)的zipfiles。用户选择主题以使压缩文件出,选择保存位置,程序将文件复制到的tempDir(与File.createTempDirectory法),然后将其通过的tempDir循环用以下代码:

         public function fileSelected(event:Event):void{            
        zipFile = event.currentTarget as File;  
        addFileToZip(tempDir, zip);         

    }

    public function addFileToZip(file:File, zip:Zip, path:String=""):void{
        if(file.isDirectory){
            var directory:Array = file.getDirectoryListing();
            filesToCompress = filesToCompress + directory.length;
            dispatchEvent(new 

            for each (var f:File in directory){
                addFileToZip(f, zip, path + "/" + file.name);
            }

            fileAddedToZip();

        }else{
            file.addEventListener(Event.COMPLETE, function():void{

                var pathSplit:Array = file.nativePath.split(".tmp\\",2);
                var fileNamePath:String = pathSplit[1] as String;                   
                zip.addFile(fileNamePath, file.data);
                fileAddedToZip();

            });             

            file.addEventListener(ProgressEvent.PROGRESS, function(e:ProgressEvent):void{

                totalLoaded = totalLoaded+e.bytesLoaded;
                trace(totalLoaded+" <---TOTAL LOADED");

            });

            file.load();

        }
    }

    public function fileAddedToZip():void{
        filesCompressed++;

        if (filesToCompress == filesCompressed){

            var stream:FileStream = new FileStream();
            stream.open(zipFile, FileMode.WRITE);
            zip.serialize(stream);                  
            stream.close();                             

            tempDir.deleteDirectoryAsync(true);             

        }
    }   

代码本身似乎工作正常:zip文件导入和导出完全正常。问题是该程序在看似随机的时间崩溃。有时会采用与30个文件,有时它3有时候,管理,使同一个zip从相同的文件,3次连续崩溃,那么它崩溃的第四次尝试了一些文件和第五尝试在不同的文件崩溃。< / p>

例如:五次尝试将35张相同图像的副本导出到zip:

  1. 35/35,TOTAL LOADED追踪:3110337
  2. 35/35,TOTAL LOADED追踪:3110337
  3. CRASH,TOTAL LOADED trace:初始化26个文件后为0
  4. 35/35,TOTAL LOADED追踪:3110337
  5. 35/35,TOTAL LOADED追踪:3110337
  6. CRASH,TOTAL LOADED trace:初始化14个文件后为0
  7. CRASH,崩溃初始化第一个文件
  8. 35/35,TOTAL LOADED追踪:3110337
  9. 35/35,TOTAL LOADED追踪:3110337
  10. FREEZE WITH CRASH(卡在文件17/35上,取消按钮工作等),TOTAL LOADED追踪:1282932
  11. 我看不到它的模式。 File.load()方法似乎是罪魁祸首,但不知道为什么。崩溃完全没有错误。唯一可以肯定的是,图像尺寸总是更多(仍然低于100MB),崩溃更常见。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

使用URLLoader解决此问题:

var request:URLRequest = new URLRequest(file.nativePath);
            var urlLoader:URLLoader = new URLLoader(request);

            urlLoader.addEventListener(Event.COMPLETE, function (event:Event):void {

                var pathSplit:Array = file.nativePath.split(".tmp\\",2);
                var fileNamePath:String = pathSplit[1] as String;                   
                zip.addFile(fileNamePath, event.target.data);

                fileAddedToZip();

            });
            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            urlLoader.load(request);