Bücher online kostenlos Kostenlos Online Lesen
Adobe Air (wiwobooks.com Release)

Adobe Air (wiwobooks.com Release)

Titel: Adobe Air (wiwobooks.com Release) Kostenlos Bücher Online Lesen
Autoren:
Vom Netzwerk:
Lese- und Schreiboperationen »in einem Rutsch« vorzunehmen, also eine Datei zu öffnen, zu lesen, zu verändern, zurückzuschreiben und wieder zu schließen. Das gilt insbesondere dann, wenn wenn Sie nicht mehr als eine Datei gleichzeitig offen haben und sich die Dateisystemoperationen in Grenzen halten. Bei einer größeren Anwendung mit intensivem Zugriff auf das Dateisystem und vielleicht sogar mehreren gleichzeitig verwendeten Dateien würde sich so jedoch die Dauer, in der der Datenstrom geöffnet ist, erheblich erhöhen. Das wiederum steigert die Wahrscheinlichkeit, dass die Datei korrumpiert wird, während sie geöffnet ist. Greifen Sie also immer nur so kurz wie möglich auf eine Dateisystemressource zu, und verwenden Sie in einer größeren Anwendung statt FileMode.UPDATE lieber separate FileStream -Instanzen für Lese- und Schreibzugriff.
12.5 Dateisystemereignisse
    Wenn Sie eine Datei mithilfe einer FileStream -Instanz synchron aufrufen, hält die Ausführung der Anwendung so lange an, bis der Vorgang zu einem Ergebnis geführt hat – also entweder zum Erfolg oder zu einem Fehler. Sie werden bei synchroner Verwendung also üblicherweise den Aufruf der open() -Methode zusammen mit dem Quelltext zum Lesen oder Schreiben von Daten in einen try -Block einschließen und mit dem zugehörigen catch -Block einen möglichen Fehler abfangen. Die bisher gezeigten Beispielfragmente der letzten Abschnitte folgen dem synchronen Ansatz.
    Anders sieht die Sache hingegen bei asynchronen Dateioperationen aus. Sie haben einen grundsätzlichen, theoretischen Einblick schon in Abschnitt 12.1 gewonnen. Nun, da Sie die read…() - und write…() -Methoden bereits kennengelernt haben, ist es an der Zeit, sich die Ereignisse asynchroner Zugriffsmethoden einmal genauer anzusehen.
12.5.1 Fehlerereignis der Datenoperation
    Wenn Sie asynchron mit dem Dateisystem arbeiten, wird in folgenden Fällen ein Fehlerereignis IOErrorEvent ausgelöst:
    Eine zu öffnende Ressource ist nicht vorhanden (Lesezugriff). Lesender und/oder schreibender Zugriff auf eine Ressource wird wegen fehlender Berechtigung verweigert (Lese- und/oder Schreibzugriff).
    Um das Fehlerereignis abzufangen, registrieren Sie einen Ereignis-Listener für das IOErrorEvent -Ereignis. Der Fehler EOFError hat im Zusammenhang mit asynchronem Dateizugriff keine Relevanz, da dieser erst auftauchen kann, wenn die Daten bereits geladen sind – und zu dem Zeitpunkt ist es bereits unerheblich, ob sie synchron oder asynchron geladen wurden.
    Lösungsweg
1. FileStream -Instanz für File -Objekt erstellen
    2. Ereignis-Listener für IOErrorEvent mit der Methode addEventListener() der FileStream -Instanz einrichten
3. FileStream -Instanz mit openAsync() öffnen
So geht es
    Das nachfolgende Beispiel einer einfachen Flex-AIR-Anwendung stellt eine Fehlermeldung dar, wenn die Datei myFile.txt nicht im Anwendungs-Dokumentenverzeichnis zu finden ist oder die Berechtigung für einen lesenden Zugriff fehlt. Die Zeilen für den Ereignis-Listener sind in fett hervorgehoben:
    
creationComplete="init()">

    private var myFile:File = File.applicationStorageDirectory. resolvePath("myFile.txt");
private var myFileStream:FileStream = new FileStream();
private function init():void {
myFileStream.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
myFileStream.openAsync(myFile, FileMode.READ); }
private function handleIOError(e:IOErrorEvent):void { taDebug.text = "Es gab einen Fehler beim Zugriff auf " + myFile.nativePath + " :\n\n" + e.text;
    }
]]>

fontFamily="Monaco, Lucida Console, Andale Mono"/>
    

Listing 12.6 Auf Dateisystemereignisse reagieren
Das Resultat eines Aufrufs der Anwendung mit ADL (Adobe Debug Launcher) sehen Sie in Abbildung 12.2.
Abbildung 12.2 Abfangen eines Dateisystem-Ereignisses
Beste Programmierpraktiken: Kapselung
    Vielleicht ist Ihnen am vorherigen Beispiel etwas aufgefallen: Der Ereignis-Listener für IOErrorEvent.IO_ERROR zeigt mit myFile.nativePath Informationen an, über die er aus dem Fehlerereignis allein nicht verfügen kann. Das mag für ein einfaches Beispiel funktionieren, ist aber kein guter Stil objektorientierter Programmierung, weil so die Informationen nicht gekapselt sind.
Sobald Sie eine

Weitere Kostenlose Bücher