Actionscript 3 File.load()似乎随机导致程序崩溃

Actionscript 3 File.load()似乎随机导致程序崩溃,actionscript-3,apache-flex,Actionscript 3,Apache Flex,我的程序有一个导出/导入功能,用于在程序中生成某些内容(图片、小视频、小pdf)的ZipFile。用户选择要制作zipfile的主题,选择保存位置,程序将文件复制到tempDir(使用File.createTempDirectory方法),然后使用以下代码在tempDir中循环: public function fileSelected(event:Event):void{ zipFile = event.currentTarget as

我的程序有一个导出/导入功能,用于在程序中生成某些内容(图片、小视频、小pdf)的ZipFile。用户选择要制作zipfile的主题,选择保存位置,程序将文件复制到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);             

        }
    }   
public function fileSelected(事件:事件):void{
zipFile=event.currentTarget作为文件;
addFileToZip(tempDir,zip);
}
公共函数addFileToZip(文件:file,zip:zip,路径:String=”“):void{
if(file.isDirectory){
var目录:Array=file.getDirectoryListing();
filesToCompress=filesToCompress+directory.length;
dispatchEvent(新)
对于每个(var f:目录中的文件){
addFileToZip(f,zip,path+“/”+file.name);
}
fileAddedToZip();
}否则{
file.addEventListener(Event.COMPLETE,function():void{
var path split:Array=file.nativePath.split(“.tmp\\”,2);
var fileNamePath:String=pathSplit[1]作为字符串;
addFile(fileNamePath,file.data);
fileAddedToZip();
});             
file.addEventListener(ProgressEvent.PROGRESS,函数(e:ProgressEvent):void{
totalLoaded=totalLoaded+e.bytesLoaded;

trace(totalLoaded+”通过使用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);