/ / FileStream.truncate () फ़ाइल कॉल करने के बाद काम नहीं करता है।

FileStream.truncate () FileStream.readUTFBytes () (Adobe AIR) - xml, flex, adobe, air, filestream को कॉल करने के बाद काम नहीं करता है

मैं एक 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();

हालाँकि, यदि मैंने फ़ाइल के खुलने के बाद रीड करने की कोशिश की है, तो पोज़िशन / ट्रंककेट डॉन "t वर्क:

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

क्या किसी को कोई विचार है कि यह काम क्यों नहीं करता है?

यदि आप पहले कोड में स्ट्रीम की जांच करते हैं,ट्रंकट () को कॉल करने के बाद, बाइट्स उपलब्ध संपत्ति 0. पढ़ेगी। लेकिन दूसरे कोड में, बाइट्स एविलेबल ने "टी चेंज" (यह वर्तमान फ़ाइल आकार दिखाएगा) जीता।

उत्तर:

उत्तर № 1 के लिए 1

ट्रंकट () के बाद स्ट्रीम बंद करें और फिर इसे फिर से खोलें। या इसके बजाय 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();

या

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