1

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

这就是我的问题所在,为什么 Ruby 在查看设置文件是否存在时总是给我一个错误?我一直试图让它与不存在的文件一起工作,这一直给我错误,“'initialize': No such file or directory @ rb_sysopen - ./settings.set (Errno::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

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

4

1 回答 1

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只有在settings.set文件退出时才会设置,否则它将保留在一个空数组中(即[])。

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

settings = [800, 600]

现在如果settings.set文件不存在,那么settingswill be [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
于 2017-07-05T18:35:17.620 回答