Как сохранить в файл? Использование AS3 на iOS (новичок)

#ios #actionscript-3 #file

#iOS #actionscript-3 #файл

Вопрос:

Я пытаюсь сохранить одно слово в файл, затем прочитать это слово, чтобы подтвердить успех. Когда выполняется код для чтения файла, он не возвращает никаких данных. И я не могу проверить, создан ли какой-либо файл.

Вот код:

 // This is run at the beginning of the frame, and this does display Hello in a textArea

var str:String = "Hellon";
feedback.text = str;



// This is run when the user taps a button

var myFile:File = File.applicationStorageDirectory.resolvePath("./eFiveV3/text.txt");

var fileStream:FileStream = new FileStream();


fileStream.open(myFile,FileMode.WRITE);

fileStream.writeUTF(str);

fileStream.close();

str = "Goodbyen";


// if the code below is run, then the feedback box will be empty. if the code below is commented out, then the feedback box will contain the text: Goodbye

fileStream.open(myFile,FileMode.READ);

str = fileStream.readMultiByte(myFile.size,File.systemCh arset);

fileStream.close();

feedback.text = str;
  

Любая помощь будет с благодарностью принята 🙂

Ответ №1:

Я бы попробовал пару диагностических приемов, но могу поспорить, что догадываюсь, почему вы видите эту проблему.

Но сначала я бы попробовал установить feedback.text значение myFile.size.toString() и посмотреть, говорит ли он, что в файле вообще есть какие-либо байты. Если это возвращается с чем-то> 0, то я бы поспорил, что происходит следующее:

Вы используете writeUTF() при записи строки, но вы используете readMultiByte() при чтении строки обратно. При использовании writeUTF() он не просто записывает строку непосредственно в файл, он добавляет в поток длину строки (как 16-битное целое число), где as readMultiByte() пытается принудительно преобразовать эти байты непосредственно в строку с заданной кодировкой. Эти дополнительные байты в начале могут привести readMultiByte() к сбою или сбою (это будет попытка чтения 0x06,0x00,0x00,0x00,H,e,l,l,o,n , а не просто H,e,l,l,o,n ). writeUTF() может использоваться для записи нескольких строк в один и тот же файл, а затем считывать их обратно из потока с readUTF() помощью .

Вероятно, вы хотите правильно связать свои методы чтения и записи, либо использовать writeUTF() и readUTF() , либо использовать writeMultiByte() и readMultiByte() . Если вы пытаетесь написать чистый текстовый файл, то writeMultiByte() это будет правильный путь. Если вы пытаетесь сериализовать кучу разных данных в один файл, то writeUTF() это правильный путь.

Если размер файла фактически равен нулю, тогда мне придется еще немного покопаться и посмотреть, что происходит.

Комментарии:

1. Большое вам спасибо. Я попытался переключиться на readUTF, и это сработало с первого раза. И ваше объяснение тоже было очень полезным. Я новичок в использовании ActionScript, и мне еще многому предстоит научиться.

Ответ №2:

Вот некоторый код с некоторыми прослушивателями событий, которые проверяют, когда файл был записан и прочитан.

 function saveFile():void{  

    var file:File = File.documentsDirectory.resolvePath("text.txt");

    var fileStream:FileStream = new FileStream();  

    fileStream.openAsync(file, FileMode.WRITE);  
    fileStream.writeUTFBytes("Hi this file was saved from AIR application without dialog");  
    fileStream.addEventListener(Event.CLOSE, fileClosed);  
    fileStream.close();  

    function fileClosed(event:Event):void { 

        trace("File Saved");  

    }        
}  

function readFile():void{  

    var file:File = File.documentsDirectory.resolvePath("text.txt");

    var fileStream:FileStream = new FileStream();  

    fileStream.openAsync(file, FileMode.READ);  
    var str:String = fileStream.readMultiByte(file.size,File.systemCharset);
    fileStream.addEventListener(Event.CLOSE, fileClosed);  
    fileStream.close();  

    function fileClosed(event:Event):void { 

        trace("File Contents:"   str);  

    }        
} 

saveFile();

readFile();
  

Не благодарите меня, благодарите Рэя: источник