Lua 5.2:更新系统(需要帮助)

我需要在 Lua 中进行文件编辑,因为我刚学会如何使用它...

这是我的代码:

local clientFile, serverFile = io.open("client.txt", "r"), io.open("server.txt", "r")

local clientVer, serverVer = tostring(clientFile:read()), tostring(serverFile:read())

io.write("\n当前版本: "..clientVer.."\n最近版本: "..serverVer.."\n\n")

if clientVer == serverVer then
    io.write("暂无更新。\n\n")
elseif clientVer ~= serverVer then
    io.write("正在更新...\n\n")
    os.remove("client.txt")
    local clientFileW = io.open("client.txt", "w+")
    clientFileW:write(serverVer)
    local clientFileR = io.open("client.txt", "r")
    io.write("客户端已更新!\n\n")
    io.write("当前版本: "..tostring(clientFileR:read()).."\n最近版本: "..serverVer.."\n\n")
end

当客户端和服务器版本相同时,输出如下:

当前版本: v2
最近版本: v2

暂无更新。

当例子中客户端版本为 v1,服务器版本为 v8 时,输出如下:

当前版本: v1
最近版本: v8

正在更新...

客户端已更新!

当前版本: nil
最近版本: v8

为什么会出现 nil?

点赞
用户142162
用户142162

问题在于输出被缓存了(即没有立即写入文件)。这个缓存是由Lua用于IO的C库函数完成的。以下是您的代码中正在发生的事情:

    -- ...
    -- 创建一个新的、空的文件
    local clientFileW = io.open("client.txt", "w+")
    -- 服务器版本存储在内部缓冲区中,等待写入文件
    clientFileW:write(serverVer)
    local clientFileR = io.open("client.txt", "r")
    -- 打开空的client.txt
    io.write("Client Updated!\n\n")
    -- 由于client.txt文件为空,因此clientFileR:read()返回nil
    io.write("Current Version: "..tostring(clientFileR:read())
             .."\nLast Version: "..serverVer.."\n\n")
end
-- 程序结束后,刷新缓冲区(例如,写入新版本),关闭文件等。

要解决您的程序问题,您可以在写入新的客户端版本后添加一个:flush()的调用。这将在该点强制将内部缓冲区写入文件:

-- ...
local clientFileW = io.open("client.txt", "w+")
clientFileW:write(serverVer)
clientFileW:flush()
local clientFileR = io.open("client.txt", "r")
-- ...
2014-10-27 13:11:49