Ruby I / O存在问题

时间:2017-07-05 18:08:03

标签: ruby libgosu

我对Ruby代码有相当多的了解,但我的当前项目确实存在问题。我使用Gosu制作2D游戏(一旦我弄清楚如何,简单的3D游戏),所以我需要一个分辨率。

这就是我的问题所在,为什么Ruby在查看设置文件是否存在时一直给我一个错误?我一直试图让它处理不存在的文件,这会让我一直出错,"'初始化':没有这样的文件或目录@ rb_sysopen - ./settings.set (错误:: ENOENT)"这最近几天一直让我讨厌。当我保留创建的文件时,该文件没有任何问题并且实际上按预期工作,但我希望它是如果文件从某人的计算机中删除,它重建文件并使用默认值创建一个新文件。

以下是它一直崩溃的区域:

settings = []

settings_file_existance = File.file?("settings.set")

if settings_file_existance == true

  File.open("settings.set").readlines.each do |line|
    settings.push line
  end

else

  settings_file = File.open("settings.set")
  settings_file.write "800"
  settings_file.write "\n" 
  settings_file.write "600"
  settings_file.close

end

我曾尝试在此网站上寻找修复程序以及其他许多程序,但到目前为止还没有人能够提供帮助。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

settings = []

if File.file?("settings.set")
  settings = File.read("settings.set").split("\n")
else
  File.open("settings.set", "w") do |file|
    file.write "800\n600"
  end
end

作为旁注,请注意上述代码仅在 settings.set 文件退出时设置settings,否则它将保留在空数组中(即[] )。

如果您希望避免这种情况,只需使用默认值定义设置,例如:

settings = [800, 600]

现在,如果 settings.set 文件不存在,则settings将为[800, 600],否则将被 settings.set中的值覆盖

为避免两次编写800600,您可以使用settings变量来获取要在新文件中写入的值,例如:

file.write(settings.join("\n"))

总而言之,您的代码将如下所示:

settings = [800, 600]

if File.file?("settings.set")
  settings = File.read("settings.set").split("\n")
else
  File.open("settings.set", "w") do |file|
    file.write(settings.join("\n"))
  end
end