#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();
Не благодарите меня, благодарите Рэя: источник