2016-06-30 7 views
0

저는 현재 Ruby를 배우고 교수형 집행 프로젝트를 진행하고 있습니다. 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>' 

이 사람이 저를 보여줄 수 : I 삭제할 파일을 선택할 때이 오류가? 이게 도움이되는지 모르겠지만 Windows에서이 작업을 수행하고 있습니다.

감사합니다.

+0

이 코드를 실행중인 사용자가 실제로 삭제할 권한이 있습니까? – Vasfed

+0

예, 관리자 계정에서 실행하고 있습니다. –

답변

1

#{game_files[index.to_i]}은 빈 문자열로 평가되며 디렉토리의 연결을 해제하려고합니다.

+0

미안하지만, 아직 초보자입니다. ELI5 (나처럼 5라고 설명 할 수 있습니까?) 나를 위해서? 무엇을 바꾸어야합니까? –

+0

나는 그것을 줄 것이다. :)'index.to_i' 표현식은'game_files'에서 정의되지 않은 인덱스로 평가됩니다. 'game_files'는 길이가 0 일 수 있습니다. 그것은 1 개의 엔트리를 가질 수 있고'index.to_i'는 1로 평가되고 당신은'nil' 값을 돌려줍니다. 문자열에 넣을 때'nil' 값을 사용하면 ""으로 나타나므로 디렉토리 이름 만'delete'에 전달됩니다. 파일을 삭제하는 것은 디렉토리를 삭제하는 것과 다르므로 오류가 발생합니다. 파일에'require "pp"'를 넣고 이것을 디버깅하려면'pp game_files'와'pp index'를 실행 해보길 권합니다. 행운을 빕니다! – Sam

관련 문제