/ / FileStream.truncate () funktioniert nicht nach dem Aufrufen von FileStream.readUTFBytes () (Adobe AIR) - Xml, Flex, Adobe, Air, Filestream

FileStream.truncate () funktioniert nicht nach dem Aufrufen von FileStream.readUTFBytes () (Adobe AIR) - XML, Flex, Adobe, Air, Filestream

Ich versuche, eine XML-Datei in den Speicher zu lesen, einen Knoten hinzuzufügen und dann über die ursprüngliche Datei zu schreiben.

Der folgende Code funktioniert einwandfrei (löscht die Datei und schreibt dann die neuen Bytes über den Anfang):

var stream:FileStream = new FileStream();
stream.open(file, FileMode.UPDATE);
stream.position = 0;
stream.truncate();
stream.writeUTFBytes("<?xml version="1.0" encoding="utf-8"?>");
stream.writeUTFBytes(File.lineEnding);
stream.writeUTFBytes(xml.toXMLString());
stream.close();

Wenn ich versuche, einen Lesevorgang auszuführen, nachdem die Datei geöffnet wurde, funktionieren die Positions- / Abschneide-Aufrufe jedoch nicht:

var stream:FileStream = new FileStream();
stream.open(file, FileMode.UPDATE);

var xml:XML = XML(stream.readUTFBytes(stream.bytesAvailable));

// Modify xml here

stream.position = 0;
stream.truncate();
stream.writeUTFBytes("<?xml version="1.0" encoding="utf-8"?>");
stream.writeUTFBytes(File.lineEnding);
stream.writeUTFBytes(xml.toXMLString());
stream.close();

Hat jemand irgendwelche Ideen, warum das nicht funktioniert?

Wenn Sie den Stream im ersten Code untersuchen,Nach dem Aufruf von truncate () wird die Eigenschaft bytesAvailable 0 lesen. Im zweiten Code ändert sich die Anzahl der BytesAvailable nicht (es wird die aktuelle Dateigröße angezeigt).

Antworten:

1 für die Antwort № 1

Schließen Sie den Stream nach dem truncate () und öffnen Sie ihn erneut. ODER verwenden Sie stattdessen openAsync.

stream.position = 0;
stream.truncate();
stream.close();
stream.open(file, FileMode.UPDATE);
stream.writeUTFBytes("<?xml version="1.0" encoding="utf-8"?>");
stream.writeUTFBytes(File.lineEnding);
stream.writeUTFBytes(xml.toXMLString());
stream.close();

ODER

var stream:FileStream = new FileStream();
stream.openAsync(file, FileMode.UPDATE);
stream.position = 0;
stream.truncate();
stream.writeUTFBytes("<?xml version="1.0" encoding="utf-8"?>");
stream.writeUTFBytes(File.lineEnding);
stream.writeUTFBytes(xml.toXMLString());
stream.close();