我的程序有一个导出/导入功能,使用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:
我看不到它的模式。 File.load()方法似乎是罪魁祸首,但不知道为什么。崩溃完全没有错误。唯一可以肯定的是,图像尺寸总是更多(仍然低于100MB),崩溃更常见。有任何想法吗?
答案 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);