Ruby I/O 存在问题

Ruby I/O Existence Issues

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

这就是我的问题所在,为什么 Ruby 在查看设置文件是否存在时总是给我一个错误?我一直试图让它与不存在的文件一起工作,这一直给我错误,“'initialize': 没有这样的文件或目录@ 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

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

你可以试试这个:

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