Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.11.2011, 12:15
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 1  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
По умолчанию Как удалить связь URLLoader-а с загруженным файлом

Здравствуйте! Работаю с AIR. Есть такой алгоритм:
1. xml файл загружается в приложение с помощью URLLoader;
2. считывается из него информация;
3. этот же xml файл открывается для записи новой информации с помощью FileStream.open();
И вот на 3 пункте выдает "Error #3013: File or directory is in use". После многих экспериментов, выяснил что этот xml файл в файловой системе используется моим URLLoader -ом, который раньше грузил этот файл. Вызов метода close() URLLoader-а и его обнуление не помогает. XML дальше используется приложением и к нему не подобраться. Как убить эту связь?
PS: Если открывать для чтения, ошибок нет, а вот записать не позволяет.
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 20.11.2011 в 12:36.
Старый 20.11.2011, 13:16
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 2  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Вот набросал:
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.filesystem.File;
	import flash.filesystem.FileMode;
	import flash.filesystem.FileStream;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
 
	public class Air extends Sprite
	{
		public function Air()
		{
			stage.addEventListener(MouseEvent.CLICK, onClick);
		}
 
		private var urlLoader: URLLoader;
		private function onClick(e: MouseEvent):void
		{
			urlLoader = new URLLoader(new URLRequest('D://myXML.xml'));
			urlLoader.addEventListener(Event.COMPLETE, onLoad);
 
			stage.removeEventListener(MouseEvent.CLICK, onClick);
		}
 
		private var fs: FileStream;
		private function onLoad(e: Event):void
		{
			stage.addEventListener(MouseEvent.CLICK, onClick2);
		}
 
		private function onClick2(e: MouseEvent):void
		{
			stage.removeEventListener(MouseEvent.CLICK, onClick2);
			fs = new FileStream();
			var file: File = File.getRootDirectories()[1];
			file = file.resolvePath('myXML.xml');
			fs.open(file, FileMode.WRITE);
 
			var xml: XML = <b>2</b>;
 
			fs.position = 0;
			fs.writeUTFBytes(xml.toXMLString());
			fs.close();
		}
	}
}
Работает, покажите код.
__________________
http://www.chessmax.ru

Старый 20.11.2011, 20:41
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 3  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Удивительно, но ваш код работает. Пойду копаться в своих мемуарах.

Добавлено через 4 часа 57 минут
Вот в чем проблема! У меня файл открывается для записи сразу после загрузки. Поэтому и нет доступа. Если в коде Inet_PC метод
Код AS3:
fs.open(file, FileMode.WRITE);
поместить в функцию onLoad(), то будут те же ошибки что и у меня.
Что делать, если я хочу загрузить данные, и моментально после загрузки обработать их перезаписать назад в файл, не ожидая чтобы прошло какое-то время. Даже если поставить таймер, то как узнать сколько времени нужно чтобы файл стал снова доступен?
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 20.11.2011, 20:54
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Почему бы просто не открыть его через FileStream на чтение и запись.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 20.11.2011, 21:02
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 5  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от alatar Посмотреть сообщение
Почему бы просто не открыть его через FileStream на чтение и запись.
Я, просто, не умею работать с байтами. Не знаю как получить обьект xml из FileStream
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 20.11.2011, 21:06
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
И вместо заполнения пробелов в знаниях решили прикрутить костыль.
Код AS3:
var xml:XML = XML(stream.readUTFBytes(stream.bytesAvailable));
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 20.11.2011, 21:13
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 7  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от alatar Посмотреть сообщение
Код AS3:
var xml:XML = XML(stream.readUTFBytes(stream.bytesAvailable));
Спасибо большое. Даже не представлял что все так просто. Надо бы поискать, как делать такое же с другими типами файлов, например mp3 -> Sound и т.д.
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 21.11.2011, 10:50
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 8  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
Почему бы просто не открыть его через FileStream на чтение и запись.
Именно, первая мысль была именно такая, но пока писал по пунктам про нее совсем забыл.
__________________
http://www.chessmax.ru

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:48.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.