2013-08-12 1 views
0

У меня есть утилита обновления в adobe air, которая должна заменить существующий файл в каталоге приложения. но когда я пытаюсь переместить файл в каталог приложения, он бросает IOError, описывая, что этот файл не может быть удален.Невозможно переместить файл с использованием файлового объекта в adobe air

Я сделал следующее;

protected function onBtnTest(event:MouseEvent):void 
{  
    try 
    { 
    service = new File(File.applicationDirectory.nativePath + File.separator + 
     "assets" + File.separator + "oldFile.exe");   

    servic_ = new File(File.userDirectory.nativePath + File.separator + "newFile.exe"); 

    servic_.addEventListener(Event.COMPLETE, OnMoveComplete); 
    servic_.addEventListener(IOErrorEvent.IO_ERROR, OnIOError); 


    if(service.exists) 
     servic_.moveToAsync(service, true); 

    } 
    catch(err:Error) 
    { 
    trace(err.message); 
    } 


} 

private function OnMoveComplete(event:Event):void 
{ 
    trace("Move Complete.");  
    trace("File Deleted."); 
} 

private function OnIOError(event:IOErrorEvent):void 
{ 
    trace("OnIOError.");  
} 

он всегда выполняет функцию OnIOError. но когда я пытаюсь переместить один и тот же файл в другой каталог, он отлично работает. Как я могу это сделать. Спасибо

+0

Почему файл не может быть удален? Есть ли какие-то другие подробности? Является ли это проблемой разрешения в каталоге? Если файл заблокирован каким-либо другим открытым процессом? В какую операционную систему вы запускаете приложение? – JeffryHouser

+0

Я думаю, что это вопрос разрешения. Он не заблокирован никаким другим процессом. Я использую окно 7., когда я запускаю свое приложение как администратор, щелкнув его правой кнопкой мыши и выбрав запуск как администратор. он отлично работает. можем ли мы сделать наше установленное приложение, которое всегда запускается в режиме администратора? Спасибо –

+1

В коде нечего делать, чтобы убедиться, что приложение запущено в режиме администратора; которые должны выполняться пользователем на уровне операционной системы. Обычно вы не можете предполагать, что у пользователя есть доступ к работе как администратор. Лучше всего использовать каталоги, к которым должен иметь доступ пользователь, например, applicationStorageDirectory или userDirectory. Полный список описан здесь: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/File.html – JeffryHouser

ответ

1

Только одно: вы НЕ МОЖЕТЕ писать в каталог приложений, это гибкая защита.

Вы ничего не можете сделать, извините. Подумайте об использовании другого каталога. Лично я использую вместо этого каталог хранилища приложений.

+0

Если я хочу заменить файл, находящийся в каталоге приложения. я не могу сделать это в коде? –

+0

К сожалению, нет. Это невозможно в чистом Flex. Это утечка безопасности. Я рекомендую вам использовать другой каталог (каталог пользователей, каталог приложений и т. Д.). Но если вы хотите ** REALLY ** хотите изменить каталог приложения, возможно, вы можете попробовать использовать внешний рабочий (командная строка, исполняемый файл и т. Д.), Который будет работать для вас. Но я не рекомендую вам это делать (кстати, я никогда не пробовал) – blaazzze

+0

Редактировать: Отсутствует слово и все меняется. Во второй строке, в круглых скобках, это не «каталог приложений», а «каталог хранения приложений». Мой плохой, извините. – blaazzze

 Смежные вопросы

  • Нет связанных вопросов^_^