重新打开已关闭的文件:Lua

时间:2013-07-12 20:36:03

标签: windows lua crysis

我有一个名为backup.lua的文件,程序应该经常写入,以便在发生故障时备份其状态。 问题是程序首次将backup.lua文件写得完全正常,但在任何其他时候它都拒绝写入文件。

我尝试在程序仍处于打开状态时删除该文件但是Windows告诉我该文件正在被“CrysisWarsDedicatedServer.exe”使用,这是该程序。我告诉主机Lua函数关闭了backup.lua文件,为什么不让它在关闭后随意修改文件?

我在互联网上找不到任何东西(谷歌实际上试图纠正我的搜索),项目的二级程序员也不知道。 所以我想知道你们中是否有人知道我们在这里做错了什么?

主机功能代码:

function ServerBackup(todo)
local write, read;
if todo=="write" then
    write = true;
else
    read = true;
end
if (write) then
    local source = io.open(Root().."Mods/Infinity/System/Read/backup.lua", "w");
    System.Log(TeamInstantAction:GetTeamScore(2).." for 2, and for 1: "..TeamInstantAction:GetTeamScore(1))
    System.LogAlways("[System] Backing up serverdata to file 'backup.lua'");
    source:write("--[[ The server is dependent on this file; editing it will lead to serious problems.If there is a problem with this file, please re-write it by accessing the backup system ingame.--]]");
    source:write("Backup = {};Backup.Time = '"..os.date("%H:%M").."';Backup.Date = '"..os.date("%d/%m/%Y").."';");
    source:write(XFormat("TeamInstantAction:SetTeamScore(2, %d);TeamInstantAction:SetTeamScore(1, %d);TeamInstantAction:UpdateScores();",TeamInstantAction:GetTeamScore(2), TeamInstantAction:GetTeamScore(1) ));
    source:close();
    for i,player in pairs(g_gameRules.game:GetPlayers() or {}) do
        if (IsModerator(player)) then
            CMPlayer(player, "[!backup] Completed server backup.");
        end
    end
end
--local source = io.open(Root().."Mods/Infinity/System/Read/backup.lua", "r"); Can the file be open here and by the Lua scriptloader too?
if (read) then
    System.LogAlways("[System] Restoring serverdata from file 'backup.lua'");
    --source:close();
    Backup = {};
    Script.LoadScript(Root().."Mods/Infinity/System/Read/backup.lua");
    if not Backup or #Backup < 1 then
        System.LogAlways("[System] Error restoring serverdata from file 'backup.lua'");
    end
end
end

谢谢大家:)。

修改

虽然现在该文件已正确写入磁盘,但系统无法读取转储文件。

1 个答案:

答案 0 :(得分:2)

所以,现在的问题是“LoadScript”功能没有达到预期效果:

因为我很精神,所以我认为你正在写一个Crysis插件,并试图使用它LoadScript API call

(请不要认为这里的每个人都会猜到这一点,或者不愿意去寻找它。这是必须构成问题一部分的重要信息)

您正在编写的脚本尝试设置Backup - 但您的脚本(如编写的那样)不会使用换行符分隔行。由于第一行是注释,因此将忽略整个脚本。

Basicallty你写的脚本看起来像这样,都被视为评论。

--[[ comment ]]--Backup="Hello!"

你需要在评论后写一个“\ n”(并且我也会在其他地方推荐)这样做。实际上,你根本不需要块注释。

--  comment
Backup="Hello!"