2016-06-30 3 views
0

私は現在、Rubyを学んでおり、Hangmanプロジェクトに取り組んでいます。これはFileとYAMLで初めての作業です。私のファイル削除メソッドをRubyに書き込むにはどうすればいいですか?

私はゲームを保存/ロードするメソッドを実装しようとしています。私は、ユーザーが以前の保存ファイルを削除するよう求められた後にゲームを保存しようとすると、最大で3つのファイルを保存したいと決めました。

はここ(謝罪、それはリファクタリングを必要とする)これまでのGithub上の私のプログラムへのリンクです:https://github.com/d-zer0/hangman/blob/master/hangman.rbhangman.rb

これはファイルを削除するために使用するコードです:

game_files = Dir.entries("saved_games").select { |f| f.include?(".sav") } 
game_file = "saved_games/#{game_files[index.to_i]}" 
File.delete(game_file) #delete file 

は、プログラムを実行しています、私は削除するファイルを選択するとき、私はこのエラーを取得:

hangman.rb:49:in `delete`: Permission denied @ unlink_internet - saved_games/ (Errno::EACCES) 
    from hangman.rb:49:in `save_game' 
    from hangman.rb:113:in `play' 
    from hangman.rb:38:in `new_game' 
    from hangman.rb:25:in `start_menu' 
    from hangman.rb:15:in `initialize' 
    from hangman.rb:172:in `new' 
    from hangman.rb:172:in `<main>' 

私はこのエラーを取得し、どのようにそれを回避するにはよ、なぜ誰もが私を見ることができますか?私はこれが役立つかどうか分かりませんが、Windowsでこれをやっています。

ありがとうございます!

+0

このコードを実行しているユーザーは、実際にその削除を行う権限を持っていますか? – Vasfed

+0

はい、管理者アカウントでこれを実行しています。 –

答えて

1

#{game_files[index.to_i]}は空の文字列に評価されており、ディレクトリのリンクを解除しようとしています。

+0

申し訳ありませんが、私はまだ初心者ですが、ELI5(私は5歳のように説明することができますか?私は何を変更する必要がありますか? –

+0

私はそれを行こう。 :) 'index.to_i'という表現は' game_files'で定義されていないインデックスを評価しています。 'game_files'は長さゼロです。 1つのエントリがあり、 'index.to_i'が1に評価されていて、' nil'値が返されている可能性があります。 文字列に置かれたときの 'nil'値は" "になります。そのため、ディレクトリ名だけが' delete'に渡されます。ファイルを削除することは、ディレクトリを削除することとは異なるため、エラーが発生しています。 ファイルに 'require" pp "'を入れ、これをデバッグするには 'pp game_files'と' pp index'を実行することをお勧めします。がんばろう! – Sam

関連する問題