2017-07-05 12 views
1

私はRubyコードについてかなりの知識がありますが、現在のプロジェクトで問題があります。私はGosuを使って2Dゲームを作っています(そして、いったん単純な3Dゲームをどうやって見つけたら、解決が必要です)。Ruby I/Oの存在問題

これは私の質問が出てくるところですが、設定ファイルが存在するのを見るとRubyがエラーを表示し続けているのはなぜですか?私はそれが私にエラーを与え続けている既存のファイルで動作させようとしていました ""初期化する ":そのようなファイルやディレクトリはありません@ 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 

は、ここでそれがでクラッシュした領域です。

+0

実際にエラーが発生した行番号/コードは何ですか? – Ruslan

答えて

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.setファイルが存在しない場合

settings = [800, 600] 

さて、その後、settings[800, 600]になり、それは:

あなたはそれを避けたい場合は、単にたとえば、デフォルト値で設定を定義しますsettings.setの値で上書きされます。

は、あなたがたとえば、新しいファイルに書き込まれる値を取得するsettings変数を使用することができ、二回800600を書く避けるために:すべて一緒にそれを置く

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 
+0

ええと...それは問題を解決しなかった...私はRubyのファイルI/Oが大好きです... –

+0

@RucksackGamerどのようなエラーが表示されますか? – Gerry

+0

同じファイルまたはディレクトリ@ rb_sysopen-settings.set(Errno :: ENOENT) " –