Lua文件读写错误。

很抱歉如果已经有类似的话题了,但是我找不到任何与Lua有关的...所以我基本上在编写和阅读文件方面遇到了一些问题,下面是我的做法:

hp = 25

file = io.open("player.txt","w")
if file==nil then
    io.output("player.txt")
    io.close()
end
file:write(hp)
file:close()

它看起来完美,一切都很正常...但是,当我试图在if语句中添加file:write(hp)时,它就失效了。如果我在file:write(hp)后添加file:read("\ *line"),它在player.txt中看起来是这样的:

25b[NUL]ÈñZ[NUL]
file = io.open("player.txt","w")

那我做错了什么呢?此外,[NUL]在notepad++中是具有白色"NUL"文本的黑色块,但在此处无法复制。

** 编辑 **:嗯,似乎整个代码都混乱了,它总是重写整个文件; o

编辑2:实际上不知道我在谈论什么,现在我可以更好地理解文件控制了,以下是应该是我的代码,或者我尝试做的:

function existsFile(path)
    x = io.open(path)
    if x == nil then
        io.close()
        return false
    else
        x:close()
        return true
    end
end

if not existsFile("player.txt") then
    file = io.open("player.txt", "w")
    file:write(25)
    hp = 25
    file:close()
else
    file = io.open("player.txt", "r")
    hp = file:read("*number")
    file:close()
end

我知道它看起来与我最初发布的代码完全不同,但这基本上是我的意思。

原文链接 https://stackoverflow.com/questions/6007438

点赞
stackoverflow用户575421
stackoverflow用户575421

你能解释一下在这段代码中你想要做什么吗?

为什么需要检查文件是否为空?当你打开文件进行写入时,如果文件不存在,lua会自动创建它。

"w" 模式意味着你将擦除文件中的所有数据并写入新数据。

也许你需要使用 "a" 模式?在这个模式中,新的行将被添加到文件的末尾。

2011-05-15 09:51:59
stackoverflow用户596285
stackoverflow用户596285

听起来你对 io.open 的标记感到困惑。请确保你真正想要的是 w 标记,因为它会覆盖所有内容。

当你在 if 语句中尝试执行 file:write 应该不会成功,我也不知道为什么你会期望它可以成功,因为 file 是空值(nil)。你在说如果文件无法打开,就尝试把它写入文件,这对我来说没有意义。

2011-05-15 14:10:02
stackoverflow用户686008
stackoverflow用户686008

if 块会检查 file 是否为 nil,所以那个代码块永远不会运行。

read() 不起作用是因为你在 "w"(写)模式下打开了文件。

在写入模式下擦除整个文件是期望的行为。在这种模式下,文件首先被擦除,然后您再向其中写入新数据。

2011-05-16 11:14:30