我对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
我曾尝试在此网站上寻找修复程序以及其他许多程序,但到目前为止还没有人能够提供帮助。
答案 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中的值覆盖
为避免两次编写800
和600
,您可以使用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