【问题标题】:How do I write my delete file method in Ruby?如何在 Ruby 中编写删除文件方法?
【发布时间】:2016-06-30 16:36:01
【问题描述】:

我目前正在学习 Ruby 并从事一个 Hangman 项目。这是我第一次使用 File 和 YAML。

我正在尝试实现保存/加载游戏的方法。我已经决定我希望最多有 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 上执行此操作。

谢谢!

【问题讨论】:

  • 运行此代码的用户是否有权实际执行删除操作?
  • 是的,我在管理员帐户上运行它。

标签: ruby file yaml delete-file


【解决方案1】:

#{game_files[index.to_i]} 正在评估空字符串,您正在尝试取消链接目录。

【讨论】:

  • 对不起,我还是个新手,你能帮我ELI5(解释一下我是5)吗?我需要改变什么?
  • 我试试看。 :) 表达式index.to_i 正在评估一个未在game_files 中定义的索引。 game_files 可能是零长度。可能它有 1 个条目,而 index.to_i 正在评估为 1,而您将返回 nil 值。将nil 值放入字符串时会产生“”,因此您只会获得传递给delete 的目录名称。删除文件与删除目录不同,因此您会收到错误消息。我建议您将require "pp" 放入文件中并运行pp game_filespp index 来调试它。祝你好运!
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 2019-09-22
  • 2011-02-19
  • 2014-03-08
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多