【问题标题】:Lua 5.2: Update System (Need Help)Lua 5.2:更新系统(需要帮助)
【发布时间】:2014-10-27 21:11:49
【问题描述】:

我需要有关 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("\nCurrent Version: "..clientVer.."\nLast Version: "..serverVer.."\n\n")

if clientVer == serverVer then
    io.write("No Updates for now.\n\n")
elseif clientVer ~= serverVer then
    io.write("Updating...\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("Client Updated!\n\n")
    io.write("Current Version: "..tostring(clientFileR:read()).."\nLast Version: "..serverVer.."\n\n")
end

当我在客户端-服务器中具有相同版本时,这是我的输出:

Current Version: v2
Last Version: v2

No Updates for now.

这是我遇到敌人时的输出示例客户端:v1 和服务器:v8

Current Version: v1
Last Version: v8

Updating...

Client Updated!

Current Version: nil
Last Version: v8

为什么我有那个零???

【问题讨论】:

    标签: io lua


    【解决方案1】:

    这里的问题是输出正在被缓冲(即没有立即写入文件)。此缓冲由C library functions which Lua uses for IO 完成。以下是您的代码中发生的事情的演练:

        -- ...
        -- new, empty file is created
        local clientFileW = io.open("client.txt", "w+")
        -- server version is stored in an internal buffer, waiting to be written to
        -- the file
        clientFileW:write(serverVer)
        local clientFileR = io.open("client.txt", "r")
        -- the empty client.txt is opened
        io.write("Client Updated!\n\n")
        -- since the client.txt file is empty, nil is returned by clientFileR:read()
        io.write("Current Version: "..tostring(clientFileR:read())
                 .."\nLast Version: "..serverVer.."\n\n")
    end
    -- end of program execution, flush buffers (e.g. write the new version),
    -- close files, etc.
    

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

    -- ...
    local clientFileW = io.open("client.txt", "w+")
    clientFileW:write(serverVer)
    clientFileW:flush()
    local clientFileR = io.open("client.txt", "r")
    -- ...
    

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 2013-04-21
      • 2013-12-06
      • 2021-01-22
      • 1970-01-01
      相关资源
      最近更新 更多