如何在Ruby中指定要写入和读取的文件位置?

时间:2015-05-13 01:05:36

标签: ruby function yaml file-writing

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

intRoomIDColVR.setCellValueFactory(new PropertyValueFactory<>("roomID"));

我还有一个函数强制pin是一个四位整数,但这并不重要。

然后,我将其添加到对象

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

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

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

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

感谢您的帮助

2 个答案:

答案 0 :(得分: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")

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

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

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

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

答案 1 :(得分:0)

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

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

  • 首先更改当前目录(使用Dir.chdir