Я пытаюсь прочитать xml-файл в памяти, добавить узел, а затем записать поверх исходного файла.FileStream.truncate() не работает после вызова FileStream.readUTFBytes() (Adobe AIR)
Следующий код работает нормально (она очищает файл, а затем записывает новые байтов сверху):
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();
Однако, если я пытаюсь выполнить чтение после того, как файл открыт, то положение/truncate calls не работают:
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 не изменится (он покажет текущий размер файла).