Как поместить\сохранить файлы в каталог приложения? (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;
}