Adobe Air FileStream 将 jpg 从一个目录复制到另一个目录
Adobe Air FileStream copy jpg from one directory to another
我正在尝试编写可以将 jpg 文件从一个目录复制到另一个目录的代码。我的想法是将选定的 jpg 加载到字节中,然后通过 writebytes 将其写入指定的文件夹。这是一个桌面 AIR 应用程序。
private function update_treebg(event:MouseEvent):void {
saveDir = 'structure/' + id + '/bg.jpg';
file.addEventListener(Event.SELECT, onFileSelected);
file.browseForOpen("Select an image", [imgFilter]);
}
private function onFileSelected(event:Event):void {
file.removeEventListener(Event.SELECT, onFileSelected);
fs.open(event.target as File, FileMode.READ);
fs.readBytes(bytes);
fs.close();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onFileLoaded);
loader.loadBytes(bytes);
}
private function onFileLoaded(event:Event):void {
event.target.removeEventListener(Event.COMPLETE, onFileLoaded);
var targetFile:File = File.desktopDirectory.resolvePath(saveDir);
fs.open(targetFile, FileMode.WRITE);
fs.writeBytes(event.target.bytes, 0, event.target.bytes.length);
fs.close();
}
每次写入文件时,指定目录下都会出现损坏的jpg文件。我错过了什么?如果您知道更好的方法,也请告诉我!
有时候我也是个白痴...
private function update_treebg(event:MouseEvent):void {
saveDir = 'structure/' + id + '/bg.jpg';
file.addEventListener(Event.SELECT, onFileSelected);
file.browseForOpen("Select an image", [imgFilter]);
}
private function onFileSelected(event:Event):void {
file.removeEventListener(Event.SELECT, onFileSelected);
fs.open(event.target as File, FileMode.READ);
fs.readBytes(bytes);
var targetFile:File = File.desktopDirectory.resolvePath(saveDir);
fs.open(targetFile, FileMode.WRITE);
fs.writeBytes(bytes, 0, bytes.length);
fs.close();
}
我修好了。
您可以按照您展示的方式执行此操作,但使用文件 类 copyTo 方法复制文件的方法要简单得多。这是您的上下文的示例:
private function onFileSelected(event:Event):void {
var sourceFile:File = event.target as File;
var targetFile:File = File.desktopDirectory.resolvePath(saveDir);
sourceFile.copyTo(targetFile, true); //true is for overwrite if already exists
}
使用复制也可以使您不必先将文件的 contents/bytes 加载到内存中,这样速度会快得多。
如果您不需要等待复制完成(或者如果文件很大),您应该使用 copyToAsync,这样您的程序就不会在复制操作完成时被锁定.
我正在尝试编写可以将 jpg 文件从一个目录复制到另一个目录的代码。我的想法是将选定的 jpg 加载到字节中,然后通过 writebytes 将其写入指定的文件夹。这是一个桌面 AIR 应用程序。
private function update_treebg(event:MouseEvent):void {
saveDir = 'structure/' + id + '/bg.jpg';
file.addEventListener(Event.SELECT, onFileSelected);
file.browseForOpen("Select an image", [imgFilter]);
}
private function onFileSelected(event:Event):void {
file.removeEventListener(Event.SELECT, onFileSelected);
fs.open(event.target as File, FileMode.READ);
fs.readBytes(bytes);
fs.close();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onFileLoaded);
loader.loadBytes(bytes);
}
private function onFileLoaded(event:Event):void {
event.target.removeEventListener(Event.COMPLETE, onFileLoaded);
var targetFile:File = File.desktopDirectory.resolvePath(saveDir);
fs.open(targetFile, FileMode.WRITE);
fs.writeBytes(event.target.bytes, 0, event.target.bytes.length);
fs.close();
}
每次写入文件时,指定目录下都会出现损坏的jpg文件。我错过了什么?如果您知道更好的方法,也请告诉我!
有时候我也是个白痴...
private function update_treebg(event:MouseEvent):void {
saveDir = 'structure/' + id + '/bg.jpg';
file.addEventListener(Event.SELECT, onFileSelected);
file.browseForOpen("Select an image", [imgFilter]);
}
private function onFileSelected(event:Event):void {
file.removeEventListener(Event.SELECT, onFileSelected);
fs.open(event.target as File, FileMode.READ);
fs.readBytes(bytes);
var targetFile:File = File.desktopDirectory.resolvePath(saveDir);
fs.open(targetFile, FileMode.WRITE);
fs.writeBytes(bytes, 0, bytes.length);
fs.close();
}
我修好了。
您可以按照您展示的方式执行此操作,但使用文件 类 copyTo 方法复制文件的方法要简单得多。这是您的上下文的示例:
private function onFileSelected(event:Event):void {
var sourceFile:File = event.target as File;
var targetFile:File = File.desktopDirectory.resolvePath(saveDir);
sourceFile.copyTo(targetFile, true); //true is for overwrite if already exists
}
使用复制也可以使您不必先将文件的 contents/bytes 加载到内存中,这样速度会快得多。
如果您不需要等待复制完成(或者如果文件很大),您应该使用 copyToAsync,这样您的程序就不会在复制操作完成时被锁定.