代码之家  ›  专栏  ›  技术社区  ›  Peter

如何打开相对于主目录的文件

  •  81
  • Peter  · 技术社区  · 16 年前

    以下操作失败 Errno::ENOENT: No such file or directory ,即使文件存在:

    open('~/some_file')
    

    但是,我可以做到:

    open(File.expand_path('~/some_file'))
    

    1. 为什么不呢 open 是否将颚化符处理为指向主目录?
    2. File.expand_path ?
    4 回复  |  直到 10 年前
        1
  •  113
  •   the Tin Man    10 年前
    1. shell(bash、zsh等)负责通配符扩展,因此在第一个示例中没有shell,因此没有扩展。使用颚化符指向 $HOME File.expand_path ,它正确地解释了颚化符,但它是函数本身的特性,而不是底层系统固有的特性;也, 文件.u路径 $家
    2. 试试这个:

      open(ENV['HOME']+'/some_file')
      

    我希望它足够光滑。我个人认为使用环境变量比使用 expand_path

        2
  •  127
  •   the Tin Man    10 年前

    我不确定Ruby1.9.3之前是否有这个版本,但我发现最优雅的解决方案是使用 Dir.home 这是核心的一部分。

    open("#{Dir.home}/some_file")
    
        3
  •  13
  •   the Tin Man    10 年前

    $HOME 如果正确设置了环境变量,在使用共享网络计算机进行开发时可能会遇到麻烦,您可以通过以下方式从Ruby获得:

    require 'etc'
    open ("#{Etc.getpwuid.dir}/some_file")
    

    我相信这会识别当前登录的用户并获取其主目录,而不是依赖于全局 $家

        4
  •  2
  •   the Tin Man    10 年前

    我发现了tilde问题,并创建了一个补丁来添加 absolute_path

    从文件文档:

    absolute_path(file_name [, dir_string] ) → abs_file_name
    

    将路径名转换为绝对路径名。相对路径是从进程的当前工作目录引用的,除非给定dir\ u字符串,在这种情况下,它将被用作起始点。如果给定的路径名以~开头,并且没有展开,它将被视为普通目录名。

    推荐文章