Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в файл в асинхронном режиме 
:(
    Опции темы
ANTON_AL
Дата 29.9.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Доброго дня !

Есть код записи данных в файл
Код

        {    
            var stream: FileStream = new FileStream( );
            stream.addEventListener( Event.COMPLETE, this.onFileOpenedForSaving );
            stream.addEventListener( OutputProgressEvent.OUTPUT_PROGRESS, this.onFileSavingProgress );

            stream.openAsync( this.destinationFile, FileMode.WRITE );
        }
        
        function onFileOpenedForSaving( e: Event ): void
        {
            // Эта функция никогда не вызывается
            var stream = e.target as FileStream;
            stream.writeBytes( this.dataToSave );
            stream.close( );
            trace( "file saved" );
        }
        
        
        function onFileSavingProgress( e: OutputProgressEvent )
        {
            // if writing is completed
            if ( e.bytesPending == 0 )
                this.SynchronizeFoldersList();
        }


Функция onFileOpenedForSaving() вызывается только если выставлен режим FileMode.READ. Не очень понятно, почему ...

После небольших изменений ...
Код

function saveFile( e:Event ): void
        {
            var stream: FileStream = new FileStream( );
            stream.addEventListener( Event.COMPLETE, this.onFileOpenedForSaving );
            stream.addEventListener( OutputProgressEvent.OUTPUT_PROGRESS, this.onFileSavingProgress );

            stream.openAsync( this.destinationFile, FileMode.WRITE );
            stream.writeBytes( this. dataToSave ); 
        }
        
        
        function onFileSavingProgress( e: OutputProgressEvent )
        {
            // if writing is completed
            if ( e.bytesPending == 0 )
                this.SynchronizeFoldersList();
        }

... всё заработало

Но возникает тогда вопрос концептуального плана - почему в режиме FileMode.WRITE, сразу-же можно пихать данные, а в режиме FileMode.READ - только в функции обработчике события Event.COMPLETE ? Ведь, может возникнуть ошибка при создании пустого файла для записи  (например, если в пути будет диск Z, которого физически не существует..., или если запись в папку будет запрещена)

Подозреваю, что это сделано из за того, что операция записи однонаправленная по смыслу - т.е. в метод writeBytes() мы подаём данные как в чёрный ящик. В случае ошибки, эти данные удалятся..

Но может всё по другому ?
PM MAIL   Вверх
nilrem
Дата 29.9.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 15.2.2006
Где: Киев

Репутация: нет
Всего: нет



writeBytes() даже не сработает если будет ошибка стрима, так как записывать в null незя.

А так все правельно и логично Event.COMPLETE при FileMode.WRITE сообщает что запись была завершена
при FileMode.READ - что чтение было завершено.
как может завершиться запись если ёе не начинали, или делать что то с данными которые до конца не известы?

а для того чтобы не возникала ошибок необходимо заранее проверять возможность и корректность записи файлов.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.