Forums Développement Multimédia

Aller au contenu

- - - - -

Probleme avec un FileStream

As3 CODE FileStream OutputProgressEvent

5 réponses à ce sujet

#1 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 25 November 2014 - 16:39 PM

Bonjour a tous.

Tout d'abord, desole pour l'absence d'accents, je ne les ai pas sur mon clavier.

Je me sert d'un FileStream pour ecrire des definitions en format Json sur mon disque, depuis quelques jours allait bien, le systeme fonctionnait correctement, mais depuis ce matin, rien ne vas plus !

Pourtant je n'ai rien modifie a mon cote de ce cote la, ma piste serait donc que, mes definitions devenant de plus en plus grosses, cela pose un probleme. Cependant, je n'arrive pas a mettre la main dessu.

Voici mon code :



public static function saveList_ToDisk ():void
{
         var jsonString:String = JSON.stringify(CurrentData.PROJECT_TEMP);
       
         var ba:ByteArray = new ByteArray ();
         ba.writeUTFBytes(jsonString);
         ba.position = 0
       
         createSourceFolder(CurrentData.PROJECT_TEMP);
         var file:File = new File ();
         file.url  = getListPath(CurrentData.PROJECT_TEMP);
         var writeStream:FileStream = new FileStream ();
         writeStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, onListSaveCompleted);
         writeStream.addEventListener(IOErrorEvent.DISK_ERROR, onListSaveError);
         writeStream.addEventListener(IOErrorEvent.IO_ERROR, onListSaveError);
         writeStream.addEventListener(IOErrorEvent.NETWORK_ERROR, onListSaveError);
         writeStream.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onListSaveError);
         writeStream.addEventListener(IOErrorEvent.STANDARD_INPUT_IO_ERROR, onListSaveError);
         writeStream.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onListSaveError);
         writeStream.addEventListener(IOErrorEvent.VERIFY_ERROR, onListSaveError);
         writeStream.openAsync(file, FileMode.WRITE);
         writeStream.writeBytes(ba, 0, ba.bytesAvailable);
}

private static function onListSaveCompleted (e:OutputProgressEvent):void
{  
         trace ("list save completed " + e.bytesPending);
         if (e.bytesPending == 0)
         {
          moveList_ToBackup();
         }
}

private static function onListSaveError (e:IOErrorEvent):void
{
   trace ("list save error " + e.type + "  "  + e.errorID);
}
 



Ce qui se passe concretement, c'est que le dernier OutputProgressEvent que je recoit m'avertis qu'il reste 4000 bytes a ecrire. Aucun IOErrorEvent n'est dispatche. Si j'observe le fichier Json qui a ete ecrit, il est correct et ne presente aucune erreur.
Mon ByteArray mesure actuellement 331530 bytes.
J'ai tente de remplacer l'OutputProgressEvent par un Event.COMPLETE, sans succes, cet event n'est jamais dispatche.

Auriez vous une idee de ce que je fais de travers ?
Merci.

#2 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1653 messages

Posté 26 November 2014 - 11:18 AM

tu as essayé avec

writeStream.addEventListener(Event.COMPLETE, fileCompleteHandler);
writeStream.openAsync(file, FileMode.UPDATE);
 


#3 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 26 November 2014 - 15:31 PM

Ca a l'air de fonctionner avec ta solution. Peux-tu m'expliquer pourquoi le mode Update fonctionne et pas le mode Write ? Merci beaucoup en tout cas.

#4 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1653 messages

Posté 26 November 2014 - 16:00 PM

dans l'aide http://help.adobe.co...m/FileMode.html

Citation

UPDATE : Utilisé pour ouvrir un fichier en mode lecture/écriture.
WRITE : Utilisé pour ouvrir un fichier en mode écriture seule.
apparemment il y a besoin du mode lecture/écriture pour que le complete fonctionne ;-)

#5 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 26 November 2014 - 16:33 PM

Ok, je vois donc pourquoi l'event COMPLETE fonctionne.

Mais je n'arrive pas a saisir la raison pour laquelle, jusqu'a environ 320 000 bytes, le systeme base sur WRITE fonctionne correctement en se basant sur l'OutputProgress, jusqu'a ce qu'il me reste plus de bytes a ecrire, puis n'arrive plus a se completer au dela. Alors que ta solution d'update, elle, fonctionne au dela de 320 000 bytes aussi.

Il n'y a peut-etre pas de reponse, c'est peut-etre juste un bug ? Mais s'il y a une explication, je suis curieux de la connaitre :)

En tout cas merci encore, tu m'as bien debloque :)

#6 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1653 messages

Posté 26 November 2014 - 17:28 PM

ça doit être une histoire de droit sur le fichier, si tu n'as pas les droits en lecture, le complete n'est pas dispaché.




Répondre à ce sujet



  

1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP