Как поместить\сохранить файлы в каталог приложений? (adobe air)

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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, этот код будет работать. Это будет НЕ РАБОТАЕТ, если это приложение. Кроме того, в документации Adobe также говорится, что приложение AIR не может писать в свой applicationDirectory.

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

Ответ 4

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

Ответ 5

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

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

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

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

Это будет нормально работать.

Ответ 6

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

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

  • nativeprocess сохраняет новый файл реестра
  • AirApp перезапустится в RunASAdmin
  • AirApp может быть доступен для записи с файлом:)

Не волнуйся!

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

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

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

Ответ 7

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

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