/ / FileStream.truncate () nie działa po wywołaniu FileStream.readUTFBytes () (Adobe AIR) - xml, flex, adobe, air, filestream

FileStream.truncate () nie działa po wywołaniu FileStream.readUTFBytes () (Adobe AIR) - xml, flex, Adobe, air, filestream

Próbuję odczytać plik xml do pamięci, dodać węzeł, a następnie napisać oryginalny plik.

Poniższy kod działa dobrze (usuwa plik, a następnie zapisuje nowe bajty u góry):

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();

Jeśli jednak spróbuję wykonać odczyt po otwarciu pliku, wywołania position / truncate nie działają:

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();

Czy ktoś ma jakieś pomysły, dlaczego to nie działa?

Jeśli zbadasz strumień, w pierwszym kodziepo wywołaniu funkcji truncate () właściwość bytesAvailable będzie czytać 0. Ale w drugim kodzie funkcja bytesAvailable nie zmieni się (pokaże bieżący rozmiar pliku).

Odpowiedzi:

1 dla odpowiedzi № 1

zamknij strumień po skrócie (), a następnie otwórz go ponownie. LUB zamiast tego użyj 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();

LUB

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();