代码之家  ›  专栏  ›  技术社区  ›  user1234567

Adobe Air FileStream将jpg从一个目录复制到另一个目录

  •  0
  • user1234567  · 技术社区  · 8 年前

    我正在尝试编写一个代码,可以将jpg文件从一个目录复制到另一个目录。我想到的是将选定的jpg加载到字节中,然后通过写字节将其写入指定的文件夹。这是一个桌面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文件。我错过什么了吗?如果你知道更好的方法,让我也知道!

    2 回复  |  直到 8 年前
        1
  •  0
  •   BadFeelingAboutThis    8 年前

    您可以按照所示的方式执行此操作,但使用file类复制文件的方法要简单得多 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
    }
    

    使用copy还可以让您不必首先将文件的内容/字节加载到内存中,这将使它更快。

    如果您不需要等待拷贝完成(或者如果文件很大),您应该使用 copyToAsync 相反,这样在复制操作完成时程序不会被锁定。

        2
  •  -1
  •   user1234567    8 年前

    我有时可能是个白痴。。。

        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();
        }
    

    我把它修好了。