【问题标题】:How to put\save files into your application directory? (adobe air)如何将\保存文件放入您的应用程序目录? (土坯空气)
【发布时间】:2011-02-21 18:18:21
【问题描述】:

如何将\save 文件放入您的应用程序目录? (adobe air) (请提供代码示例)

【问题讨论】:

    标签: actionscript-3 file air mxml filesystems


    【解决方案1】:

    @格伦登 如果您尝试直接保存到applicationDirectory,它确实会引发错误,但您似乎可以在文件系统中移动文件。我在你之后使用了下面的代码:

    var sourceFile:File = File.applicationStorageDirectory.resolvePath ("file.txt");
    var pathToFile:String = File.applicationDirectory.resolvePath ('file.txt').nativePath;
    var destination:File = new File (pathToFile);
    sourceFile.moveTo (destination, true);
    

    '不应该'使用应用程序文件夹的原因是不是所有用户都有权将文件保存在该文件夹中,而每个人都可以在applicationStorageDirectory中保存文件。

    【讨论】:

    • 很好的解决方案。嗯.. 我应该在我的 AIR 桌面应用程序中使用应用程序文件夹。谢谢。
    【解决方案2】:

    此功能提供您当前绕过安全问题的空中应用程序文件夹:

    function SWFName(): String {
            var swfName: String;
            var mySWF = new File(this.loaderInfo.url).nativePath;
            swfName= this.loaderInfo.loaderURL;
            swfName = swfName.slice(swfName.lastIndexOf("/") + 1); // Extract the filename from the url
            swfName = new URLVariables("path=" + swfName).path; // this is a hack to decode URL-encoded values
            mySWF = mySWF.replace(swfName, "");
            return mySWF;
        }
    

    【讨论】:

      【解决方案3】:

      如果你想将文件写入ApplicationDirectory,对吧?

      请不要忘记使用当前 adobe 应用程序的注册表项通过 powershell 为 nativeprocess 写入(例如:C:\Program Files (x86)\AirApp\AirApp.exe with RunAsAdmin)

      1. 本机进程保存新的注册表文件
      2. AirApp 将重启进入 RunASAdmin
      3. AirApp 可以用文件写入 :)

      别担心!

      我知道有时应用程序首先通过注册表文件写入并通过将 nativeprocess 写入注册表文件到注册表结构来调用 powershell 的技巧。

      看起来我从 adobe 系统板/论坛的建议比使用文件写入流的访问问题要好:)

      我希望你知道我通过 powershell + regedit /s \AirApp.reg 使用 nativeprocess 的技巧 并且 AirApp 更改为管理 AirApp,而不是在管理模式下正常工作:) 比你的解决方案应该写然后你尝试 - 确保你的写作过程是由 AirApp 完成的。

      【讨论】:

        【解决方案4】:

        试试这个。

        var objFile:File = new File(“file:///”+File.applicationDirectory.resolvePath(strFilePath).nativePath);
        

        输出会是这样的……

        file:///c:\del\userConf.xml
        

        这会很好用。

        【讨论】:

          【解决方案5】:

          接受的答案有效!

          但如果我这样做:

          var vFile = File.applicationDirectory.resolvePath('file.txt');
          var vStream = new FileStream();
          vStream.open(vFile, FileMode.WRITE);
          vStream.writeUTFBytes("Hello World");
          vStream.close();
          

          它会给出 SecurityError: fileWriteResource。但是,如果我改用 applicationStorageDirectory,则上面的代码将起作用。如果它是 applicationDirectory,它只会不起作用。此外,Adobe 的文档还说 AIR 应用程序无法写入其 applicationDirectory。

          现在,我想知道 Adob​​e 允许使用接受的答案建议的方式写入 applicationDirectory 是否是一个错误。

          【讨论】:

          • 在 Mac 上,我能够在以下路径使用 applicationDirectory 创建文件夹:/Users/administrator/Library/Preferences/Main/Local Store/thumbAppStorageDir 但之后我无法运行相同的又是几行代码。奇怪。
          【解决方案6】:

          不推荐,但有可能。像这样构建您的文件引用:

          var pathToFile:String = File.applicationDirectory.resolvePath('file.txt').nativePath;
          var someFile:File = new File(pathToFile);
          

          【讨论】:

          • 我不知道谁不推荐,但可能是创建应用程序删除的设置文件的唯一方法。
          • 在发布版本中,如果您尝试编写此代码将失败! ADL 将允许您在应用程序目录中写入文件,但不允许在 AIR 的发布版本中写入文件。加载时对整个应用程序进行校验和检查。
          • @ansiart 利用这个解决方案,我导出并安装了一个发布版本。我运行了应用程序,没问题。我关闭了应用程序并再次运行,期待校验和错误没有问题。我确认我复制的文件仍然存在于 app 目录中。 ( FB4.6 ) 我还检查了空气包,以确认我没有不小心将文件放入发行版中。我是否缺少某些选项导致此解决方案中断。
          • 虽然有点警告 - “在 Android 上,指向应用程序目录的 File 对象的 nativePath 属性是一个空字符串。” - 来自 AS3 文档。
          • 像魅力一样工作,谢谢。并且添加一个非常有效的场景,作为开发人员,您需要保存到应用程序目录,当您在 appDir 的文件夹中拥有所有资源并且您还拥有一个自定义打包程序时,它会创建一个包含所有内容的单个容器文件那些资源。该应用程序可以打开任何一个,但对于开发,您将使用该文件夹,而在发布时您将发送打包的容器文件。当您可以简单地在其位置创建打包文件时,在打包文件中移动会有点复杂。
          【解决方案7】:

          您不能写入 AIR 应用程序的应用程序目录,这是不允许的。但是,您可以写入 AIR 应用程序在用户目录中创建的文件夹,称为应用程序存储目录。如果您需要配置文件等,那可能是放置它们的最佳位置。请参阅以下文档链接中的“applicationDirectory”:

          http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-02-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多