Я пытаюсь прочитать файл XML в память, добавить узел, а затем записать поверх исходного файла.
Следующий код работает просто отлично (он очищает файл, а затем записывает новые байты поверх):
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();
Однако, если я попытаюсь выполнить чтение после открытия файла, вызовы позиции / усечения не будут работать:
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();
У кого-нибудь есть идеи, почему это не работает?
Если вы исследуете поток в первом коде после вызова truncate (), свойство bytesAvailable будет читать 0. Но во втором коде bytesAvailable не изменится (он покажет текущий размер файла) .