简体   繁体   中英

How to set io.output() back to default output file?

I am learning how work with files in Lua, and I came across a problem.

I know that:

  • io.output() allows me to specify the file that I will write output to.

  • The io.write() function simply gets a number of string arguments and writes them to the current output file.

  • io.close() then closes the file I am reading or writing on.

I first set io.output() to "myNewFile.txt" then I did io.write("Hello World.").

io.output("myNewFile.txt") io.write("Hello World!")

This part worked well and myNewFile.txt got Hello World written to it. Then I wrote io.close() to close the myNewFile.txt.

After that, I wrote io.write("Hello World!") , but I got an error:

C:\\Program Files\\lua\\lua54.exe: ...OneDrive\\Documents\\learning lua\\steve's teacher\\main.lua:9: default output file is closed stack traceback: \[C\]: in function 'io.write'...OneDrive\\Documents\\learning lua\\steve's teacher\\main.lua:9: in main chunk \[C\]: in?

I wanted io.write("Hello World!") to write Hello World in the terminal. I know can use print() but print() function adds extra characters like \n and things like that.

So my question is, how do I write Hello World in the terminal using io.write("Hello World?") in this situation?

I tried to search this error up on Google, but there weren't any results. I also tried joining many Discord servers, but I didn't get a proper response. I am a new developer to Lua so this all is really confusing to me.

After io.close() do a io.output(io.stdout) to set it back.

The clean way

local oldout = io.output() -- without argument returns actual output
io.output("file") -- set to a filename
-- do file operations here
-- use io.flush() where it is necessary
io.close() -- close file also do a flush()
io.output(oldout) -- set back to oldout ( normally io.stdout )
-- changing io.output() back should also close() and flush() the "file"
-- But better doublecheck this when using userdata without experience

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM