xdan
xdan

Reputation: 663

How to create a file name with current date & time in lua?

I want to write a table into a file which named by the date and time it created. I can open a file with hard coded name, write the table into it, like below:

FILENAME_EVENTS="Events.txt"            -- filename in string
local fp=io.open(FILENAME_EVENTS, a)        -- open a new file with the file name
io.output(FILENAME_EVENTS)      -- redirect the io output to the file
-- write the table into the file
for i, e in ipairs(eventlist) do io.write(e.title, e.category, e.ds, e.de, e.td) end

But when I try to:

FILENAME_EVENTS=os.date().."\.txt"          -- filename in string with date
local fp=io.open(FILENAME_EVENTS, a)        -- open a new file with the file name
io.output(FILENAME_EVENTS)      -- redirect the io output to the file
-- write the table into the file
for i, e in ipairs(eventlist) do io.write(e.title, e.category, e.ds, e.de, e.td) end

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

Why this "10/06/11 17:45:01.txt" is an invalid argument? due to it contains spaces or '/'? Or any other reasons?

BTW, the platform is win7 Pro + Lua 5.1.4 for win

Upvotes: 1

Views: 2475

Answers (1)

jpjacobs
jpjacobs

Reputation: 9549

Apparently it's both / and : that bork. The first probably because it is regarded as directory separator. This can be demonstrated as below:

fn=os.date()..'.txt'
print(io.open(fn,'w')) -- returns invalid argument

fn=os.date():gsub(':','_')..'.txt'
print(io.open(fn,'w')) -- returns nil, no such file or directory

fn=os.date():gsub('[:/]','_')..'.txt'
print(io.open(fn,'w')) -- returns file(0x...), nil <-- Works

BTW, instead of using strange gsub and concatenation tricks, you might also consider using something like

fn=os.date('%d_%m_%y %H_%M.txt')

Upvotes: 9

Related Questions