Как сохранить в файл? Использование AS3 на iOS (новичок) - PullRequest
3 голосов
/ 14 октября 2011

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

Вот код:

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

var str:String = "Hello\n";
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 = "Goodbye\n";


// 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;

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

Ответы [ 2 ]

3 голосов
/ 14 октября 2011

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

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

Вы используете writeUTF() при написании строки, но вы используете readMultiByte() при чтении строки обратно.Когда вы используете writeUTF(), он не просто записывает строку в файл напрямую, он добавляет к потоку длину строки (в виде 16-битного целого), где 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 голос
/ 09 ноября 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...