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になります。ただし、2番目のコードでは、bytesAvailableは変更されません(現在のファイルサイズが表示されます)。