【问题标题】:Is it possible to save files using Air2 or Air2.5, inside any custom folder?是否可以在任何自定义文件夹中使用 Air2 或 Air2.5 保存文件?
【发布时间】:2012-07-09 10:20:37
【问题描述】:

我的 Air 2.5 应用程序需要在某个自定义文件夹中保存一些文本文件。

目前我正在使用文档文件夹来保存文件(使用 FileStream),效果很好。但我需要将它保存在任何文件夹中。

有没有办法将文件保存在任何目标文件夹中? (使用 FileStream)

【问题讨论】:

    标签: actionscript-3 file air save directory


    【解决方案1】:

    根据自 1.5 以来的Adobe AIR docs

    除非对用户的计算机有管理员限制,否则 AIR 应用程序有权写入用户硬盘上的任何位置。

    另请阅读Best security practices for developers

    例如,您可以使用以下方法进入桌面:

    File.desktopDirectory.resolvePath(your_path);
    

    【讨论】:

    • 如果我想将文件保存在其他地方的文件夹中怎么办? (例如 D:\MyFolder
    【解决方案2】:

    如果您有管理员权限,您可以将文件保存在任何地方,但不能保存在 File.ApplicationDirectory 中(您将遇到安全错误)。

    但是有一个技巧:

    var fs : FileStream = new FileStream;
    var errorFile : File = File.applicationDirectory.resolvePath("foo.txt");
    
    try{
        // Error
        fs.open(errorFile, FileMode.WRITE);
    }catch(e:Error){
        trace("Security error");
    }
    
    var okFile : File = new File(File.applicationDirectory.resolvePath("foo.txt").nativePath);
    
    // No error
    fs.open(okFile, FileMode.WRITE);
    

    【讨论】:

      【解决方案3】:

      我得到了有效的解决方案。它将文件保存到您的目标文件夹。它可能会对你有所帮助。

      /*Requires AIR 2.5 (May be AIR 2.0. I have not tested) and Flash CS6.*/
      import flash.filesystem.*;
      import flash.utils.ByteArray;
      
      //Sample XMl
      var xml:XML = <audio>song1.mp3</audio>;
      var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';
      outputString +=  xml.toXMLString();
      outputString = outputString.replace(/\n/g,File.lineEnding);
      
      //Byte array
      var xmlData:ByteArray = new ByteArray();
      xmlData.writeUTFBytes(outputString);
      
      //Targeted custom folder
      var urlStr:String = "file:///D:/Temp/"; // you can get this URL from external text file
      var audioXMLFile:File = new File();
      audioXMLFile.url = urlStr;
      audioXMLFile = audioXMLFile.resolvePath("SongList.xml");
      
      //File stream
      var outStream:FileStream = new FileStream();
      outStream.addEventListener(Event.CLOSE, dataSaved, false, 0, true);
      outStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, savingProgress, false, 0, true);
      
      //open output file stream in WRITE mode
      outStream.openAsync(audioXMLFile, FileMode.WRITE);
      
      //write out the file
      outStream.writeBytes(xmlData, 0, xmlData.length);
      
      //Saving progress
      function savingProgress(e:OutputProgressEvent):void
      {
          if (e.bytesPending == 0)
          {
              //Close stream on save
              e.target.close();
          }
      }
      
      // 
      function dataSaved(e:Event):void
      {
          trace("File Saved");
      }
      

      【讨论】:

      • 我只在 Windows7 上测试过,但如果目标平台支持 Adob​​e AIR,那么可能在那个平台上是可能的。
      猜你喜欢
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      相关资源
      最近更新 更多