【问题标题】:Lua file concatenationLua 文件连接
【发布时间】:2011-08-01 15:21:33
【问题描述】:

我正在尝试连接 lua 文件夹中的每个文件,以将一堆日志编译成一个主日志并将其发送给某人。我正在使用 ifs 库遍历目录中的每个文件,然后将其全部读取并尝试将其附加到主文件中。

for name in lfs.dir("logs") do
    if(name ~= "." and name ~= "..") then
     local path = "logs/"..name
     print (path)
     local file=io.open(path,"R")
     print "2"
     local content = io.read("*all")
     print "3"
     io.close(file)

     local f=io.open("log.csv","A")
     file:write(content)
     io.close(f)    
    end
end 

有两个问题。 ifs 库返回“。”和“..”在其他文件名之前[有没有比 if 语句更好的方法来忽略这些?] 使用我在这里找到的位:How to load all files from a directory?

重要的问题是我的命令提示符在我测试文件时不断崩溃。它打印路径(一个好的路径),然后在到达“2”之前崩溃,我不知道为什么。该文件存在,我可以通过在另一个函数中添加行来操作它。

任何帮助将不胜感激。

【问题讨论】:

    标签: lua


    【解决方案1】:

    为避免检查".""..",您应该使用lfs.attributes 及其mode 字段来查看每个项目是文件还是目录(或其他内容)。

    您可能需要file:read 而不是io.read——这可能是您“崩溃”的原因。

    我建议您使用"r""a+" 作为io.open 模式参数。

    哦,用f:writecontent

    【讨论】:

    • 您应该指出io.read 不是从file 中读取的;它从全局文件句柄中读取。未打开的全局文件句柄。
    • 另外,很好奇“R”与“r”的解释是否不同,以及 + 为“a+”添加了什么,因为我以前从未见过。
    • Re:小写模式参数...这就是它们在lua.org/manual/5.1/manual.html#pdf-io.open 中的记录方式,所以这就是我要使用的。
    • Re: "a+"... Lua 文档有点误导(对我来说);回想起来,我认为你最好用“a”。另见stackoverflow.com/questions/3645123/opening-a-file-in-a-mode
    • 抱歉回复晚了,我没有意识到它也不会通知我这些 cmets。非常有帮助的阅读,感谢您的帮助。我认为 'R' 和 'r' 的工作原理相同,但为了安全起见,我听从了您的建议 :)
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2023-03-17
    • 2014-02-03
    相关资源
    最近更新 更多