Как поместить \ сохранить файлы в каталог вашего приложения? (Adobe Air) - PullRequest
11 голосов
/ 20 мая 2010

Как поместить \ сохранить файлы в каталог вашего приложения? (Adobe Air) (пример кода, пожалуйста)

Ответы [ 7 ]

15 голосов
/ 17 мая 2011

Не рекомендуется, но возможно. Создайте ссылку на файл следующим образом:

var pathToFile:String = File.applicationDirectory.resolvePath('file.txt').nativePath;
var someFile:File = new File(pathToFile);
9 голосов
/ 20 мая 2010

Вы не можете писать в каталог приложений своего приложения AIR, это запрещено. Однако вы можете записать в папку, которую ваше приложение AIR создает в каталоге пользователя, которая называется Каталог хранилища приложений. Если вам нужны файлы конфигурации и тому подобное, это, вероятно, лучшее место для их размещения. Смотрите 'applicationDirectory' в ссылке на документы ниже:

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

2 голосов
/ 07 ноября 2012

@ Глендон Если вы попытаетесь сохранить файл непосредственно в 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.

2 голосов
/ 02 февраля 2012

Принятый ответ работает!

Но если я сделаю это вместо:

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 не может записывать в свой каталог application.

Теперь мне интересно, если это ошибка со стороны Adobe, что они позволяют писать в каталог приложений, используя способ, предложенный в принятом ответе.

1 голос
/ 24 июля 2012

Если вы хотите записать файл в ApplicationDirectory, верно?

Пожалуйста, не забудьте написать для nativeprocess с помощью powershell с ключом реестра для вашего приложения Adobe (например: C: \ Program Files (x86) \ AirApp \ AirApp.exe с RunAsAdmin)

  1. nativeprocess сохраняет новый файл реестра
  2. AirApp перезапустится в RunASAdmin
  3. AirApp можно записать с помощью файла:)

Не волнуйтесь!

Я знаю, что такой трюк, как иногда, приложение пишет сначала через файл реестра и вызывает powershell, записывая nativeprocess в файл реестра в структуры реестра.

Похоже, мое предложение от системных плат / форума Adobe было лучше, чем проблема с доступом при записи потока с файлом:)

Я надеюсь, что вы знаете, потому что вы знаете мой хороший трюк с nativeprocess через powershell + regedit / s \ AirApp.reg и AirApp превращается в административный AirApp, чем он работает нормально с режимом администрирования :) Чем ваше решение должно написать, и вы попытаетесь - Убедитесь, что для вашего процесса написания AirApp.

1 голос
/ 15 мая 2012

попробуйте это.

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

вывод будет таким ...

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

Это будет хорошо работать.

0 голосов
/ 30 июня 2017

эта функция выдает текущую папку приложения для эфира, которая обходит проблему безопасности:

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;
    }
...