我正在尝试将 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 不会改变(它将显示当前文件大小)。