如何修复未创建的文件

时间:2019-07-25 09:31:03

标签: lua

我想使用lua创建文件。但是会发生错误。

我使用luajit-2.0.5。

local f = io.open("C://Users//lolgo//OneDrive//Рабочий стол//lua//test.txt", "a") f:write('Hello world\n') f:close()

我希望代码能正常工作,但是会出现错误。attempt to index local 'f' (a nil value)

2 个答案:

答案 0 :(得分:1)

Lua 5.3 Reference Manual 6.8: Input Output Facilities: io.open

  

io.open(文件名[,模式])

     

此功能在模式下打开文件   在字符串模式下指定。如果成功,它将返回一个新的   文件句柄。

您不能仅仅期望此操作有效。因此,在尝试索引它之前,必须检查io.open是否实际上返回了文件句柄。

您需要某种错误处理。

local f = io.open("C://Users//lolgo//OneDrive//Рабочий стол//lua//test.txt", "a")
if f then
  f:write('Hello world\n')
  f:close()
else
  print("cannot access file")
end

您的路径或用户权限有问题。

在您的情况下,很可能是由于路径中的双斜杠。

使用双反斜杠获得单个反斜杠或使用单个反斜杠。

答案 1 :(得分:0)

由于路径错误,无法打开文件。没有理由在其中有麻烦的斜线。只需将其更改为"C:/Users/lolgo/OneDrive/Рабочий стол/lua/test.txt"就可以了。

由于op.open不会引发错误,而是返回nil +错误消息,所以它不会在那里崩溃,而是在您尝试索引f的下一行中,即nil

如果要处理这些情况,请在尝试打开文件后检查f是否为零,如果是,则执行其他操作。

local f, err = io.open(...)
if not f then
  print("Error opening file!")
  -- Try something else instead
else
  f:write("Hello World!\n")
  f:close()
end

如果无法打开文件时程序崩溃,可以将对io.open(...)的调用转换为assert(io.open(...)),当io.open返回{{1 }},并利用提供的错误消息,因此您可以更轻松地发现将来可能出现的问题。

nil