如何避免错误#2030:遇到文件结束。 - AS3

时间:2014-04-27 13:30:28

标签: actionscript-3 file flash air eof

我试图在Flash / AS3中制作这个游戏,只要玩家不输,它就会继续。玩家所用的时间越长,他/她的得分就越高。

我还需要保存高分,所以我决定使用文本文件保存。我用模式UPDATE打开文件,这样如果文件不存在,它就会被创建,我可以读/写。但显然,当首次创建文件时它是空的,所以当我尝试读取文件中的数据时,它返回错误#2030。然后它不执行任何涉及文件流的代码。即使文件中有数字,我也无法读取它,因为程序不知道高分会有多少位数。这是我正在使用的代码:

var file:File = File.documentsDirectory;
file = file.resolvePath("hscore.txt");
var fileStream:FileStream = new FileStream();
fileStream.openAsync(file, FileMode.UPDATE);
var buffer:Number = fileStream.readInt();
if (buffer > 0){
    if (score > buffer){
        buffer = score;
        fileStream.writeInt(buffer);
    }
    else{
        highScore.text = String(buffer);
    }
}
else{
    fileStream.writeInt(score);
    highScore.text = String(score);
}
fileStream.close();

我尝试过使用readUTF / writeUTF和readUTFBytes / writeUTFBytes而不是readInt / writeInt,但是使用readUTF / writeUTF它只会给我相同的错误,而对于readUTFBytes / writeUTFBytes,程序需要知道高分是多少位数。如果有人知道如何解决2030错误或知道如何阅读文件而未到达终点或知道如何查看文件中有多少位数,请告诉我。

我本来可以在文件中添加一行告诉程序有多少位数但是当文件是新的时,文件流会在尝试读取位数时到达文件的末尾。我也对其他存储高分并稍后阅读的方法持开放态度。提前感谢您的帮助。

P.S。我正在尝试使用Adobe AIR for Android

执行此操作

1 个答案:

答案 0 :(得分:0)

根据评论的帮助回答我自己的问题:

  1. 打开并关闭文件而不进行任何更改,以便在文件不存在时创建文件。
  2. 检查文件大小,1字节= 1位数(以UTF-8存储)。
  3. 读取适当的字节数,根据需要进行更改等。 ]
  4. 避免错误2030! :d
  5. 感谢@Vesper和@Craig

    *****编辑*****
    意识到您不需要在第一步中关闭文件...

    ***** EDIT2 *****
    不是UTF-8,ASCII