Actionscript 3 File.load()似乎随机导致程序崩溃
我的程序有一个导出/导入功能,用于在程序中生成某些内容(图片、小视频、小pdf)的ZipFile。用户选择要制作zipfile的主题,选择保存位置,程序将文件复制到tempDir(使用File.createTempDirectory方法),然后使用以下代码在tempDir中循环: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
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);