【问题标题】:How can I specify the file location to write and read from in Ruby?如何在 Ruby 中指定要写入和读取的文件位置?
【发布时间】:2015-05-13 01:05:35
【问题描述】:

所以,我有一个函数可以创建一个指定用户数据的对象。然后,使用 Ruby YAML gem 和一些代码,我将对象放入 YAML 文件并保存。这会将 YAML 文件保存到运行 Ruby 脚本的位置。如何告诉它保存到某个文件目录? (简化版)我的代码是这样的

print "Please tell me your name:  "
$name=gets.chomp
$name.capitalize!
print "Please type in a four-digit PIN number:  "
$pin=gets.chomp

我还有一个函数可以强制引脚为四位整数,但这并不重要。

然后,我将它添加到一个对象中

new_user=Hash.new (false)
new_user["name"]=$name
new_user["pin"]=$pin

然后将其添加到 YAML 文件并保存。如果 YAML 文件不存在,则创建一个。它在脚本运行所在的同一文件目录中创建它。有没有办法更改保存位置? 将对象保存到 YAML 文件的脚本是这样的。

def put_to_yaml (new_user)
File.write("#{new_user["name"]}.yaml", new_user.to_yaml)
end
put_to_yaml(new_user)

最终,问题是:如何更改文件的保存位置?当我再次加载它时,我如何告诉它从哪里获取文件?

感谢您的帮助

【问题讨论】:

    标签: ruby function yaml file-writing


    【解决方案1】:

    当前,当您使用File.write 时,它会获取您当前的工作目录,并将文件名附加到该位置。试试:

    puts Dir.pwd #  Will print the location you ran ruby script from.
    

    如果你想每次都写在特定位置,可以指定绝对路径:

    File.write("/home/chameleon/different_location/#{new_user["name"]}.yaml")
    

    或者您可以指定当前工作目录的相对路径:

    # write one level above your current working directory
    File.write("../#{new_user["name"]}.yaml", new_user.to_yaml)
    

    您还可以指定 relative 到您当前正在执行的 ruby​​ 文件:

    file_path = File.expand_path(File.dirname(__FILE__))
    absolute_path = File.join(file_path, file_name)
    File.write(absolute_path, new_user.to_yaml)
    

    【讨论】:

    • 所以,如果我想将它写入包含 Ruby 脚本的文件夹中的文件夹中,并且该文件夹称为库,我将如何将它放在那里?我将如何从那里阅读它?
    • 您将使用最后一个示例。将该代码放入库文件夹中的文件中,它将写入那里。
    • 好吧,在最后一个例子中,(FILE) 位是什么?
    • 好的。 file_path 指定的位置是否加引号?
    • 不确定我是否理解。 file_path 是一个字符串,所以你不需要再引用它了。
    【解决方案2】:

    您提供的是部分路径名(仅仅是文件名称),所以我们从当前目录读取和写入。因此,您有两种选择:

    • 提供完整的绝对路径名(我个人喜欢为此使用 Pathname 类);或

    • 先改变当前目录(用Dir.chdir

    【讨论】:

      猜你喜欢
      • 2016-09-10
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      相关资源
      最近更新 更多