如何在 Lua 中创建一个带有当前日期和时间的文件名?

我想把一个数据表写入一个文件中,这个文件名是根据创建时间和日期命名的。

我可以用硬编码的名称打开一个文件,把表写进去,像这样:

FILENAME_EVENTS="Events.txt"            -- 文件名字符串
local fp=io.open(FILENAME_EVENTS, a)        -- 用文件名打开一个新文件
io.output(FILENAME_EVENTS)      -- 重定向io输出到文件上
-- 把表写进文件里
for i, e in ipairs(eventlist) do io.write(e.title, e.category, e.ds, e.de, e.td) end

但当我试图用以下代码写入文件,报错了:

FILENAME_EVENTS=os.date().."\.txt"          -- 带日期的文件名字符串
local fp=io.open(FILENAME_EVENTS, a)        -- 用文件名打开一个新文件
io.output(FILENAME_EVENTS)      -- 重定向io输出到文件上
-- 把表写进文件里
for i, e in ipairs(eventlist) do io.write(e.title, e.category, e.ds, e.de, e.td) end

我得到了一个错误:

bad argument #1 to 'output' (10/06/11 17:45:01.txt: Invalid argument) stack traceback: [C]: in function 'output'

为什么 "10/06/11 17:45:01.txt" 是无效的参数呢? 是因为其中包含空格或 "/"? 还是其他原因?

顺便说一下,这是win7 Pro + Lua 5.1.4 for win平台。

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

点赞
stackoverflow用户513763
stackoverflow用户513763

显然是 /: 搞了鬼。第一个可能是因为它被视为目录分隔符。如下所示:

fn=os.date()..'.txt'
print(io.open(fn,'w')) -- 返回无效参数

fn=os.date():gsub(':','_')..'.txt'
print(io.open(fn,'w')) -- 返回nil,没有这样的文件或目录

fn=os.date():gsub('[:/]','_')..'.txt'
print(io.open(fn,'w')) -- 返回文件 (0x...),nil <-- 可行

顺便说一句,不要使用奇怪的 gsub 和连接技巧,你可以考虑像这样使用:

fn=os.date('%d_%m_%y %H_%M.txt')
2011-10-06 10:18:31