类 Dir

公共类方法

mktmpdir(prefix_suffix=nil, *rest, **options) { |dup| ... } 点击切换源代码

Dir.mktmpdir 创建一个临时目录。

require 'tmpdir'
Dir.mktmpdir {|dir|
  # use the directory
}

该目录使用 0700 权限创建。应用程序不应更改权限,以使其他用户可以访问该临时目录。

目录名称的前缀和后缀由可选的第一个参数 prefix_suffix 指定。

  • 如果未指定或为 nil,则使用“d”作为前缀,不使用后缀。

  • 如果它是字符串,则用作前缀,不使用后缀。

  • 如果它是一个数组,则第一个元素用作前缀,第二个元素用作后缀。

Dir.mktmpdir {|dir| dir is ".../d..." }
Dir.mktmpdir("foo") {|dir| dir is ".../foo..." }
Dir.mktmpdir(["foo", "bar"]) {|dir| dir is ".../foo...bar" }

该目录创建在 Dir.tmpdir 或可选的第二个参数 tmpdir 下(如果给出了非 nil 值)。

Dir.mktmpdir {|dir| dir is "#{Dir.tmpdir}/d..." }
Dir.mktmpdir(nil, "/var/tmp") {|dir| dir is "/var/tmp/d..." }

如果给出了块,则会将目录的路径传递给它。在 Dir.mktmpdir 返回之前,将使用 FileUtils.remove_entry 删除该目录及其内容。返回块的值。

Dir.mktmpdir {|dir|
  # use the directory...
  open("#{dir}/foo", "w") { something using the file }
}

如果没有给出块,则返回目录的路径。在这种情况下,Dir.mktmpdir 不会删除该目录。

dir = Dir.mktmpdir
begin
  # use the directory...
  open("#{dir}/foo", "w") { something using the file }
ensure
  # remove the directory.
  FileUtils.remove_entry dir
end
# File tmpdir.rb, line 97
def self.mktmpdir(prefix_suffix=nil, *rest, **options, &block)
  base = nil
  path = Tmpname.create(prefix_suffix || "d", *rest, **options) {|path, _, _, d|
    base = d
    mkdir(path, 0700)
  }
  if block
    begin
      yield path.dup
    ensure
      unless base
        base = File.dirname(path)
        stat = File.stat(base)
        if stat.world_writable? and !stat.sticky?
          raise ArgumentError, "parent directory is world writable but not sticky: #{base}"
        end
      end
      FileUtils.remove_entry path
    end
  else
    path
  end
end
tmpdir() 点击切换源代码

返回操作系统的临时文件路径。

require 'tmpdir'
Dir.tmpdir # => "/tmp"
# File tmpdir.rb, line 25
def self.tmpdir
  Tmpname::TMPDIR_CANDIDATES.find do |name, dir|
    unless dir
      next if !(dir = ENV[name] rescue next) or dir.empty?
    end
    dir = File.expand_path(dir)
    stat = File.stat(dir) rescue next
    case
    when !stat.directory?
      warn "#{name} is not a directory: #{dir}"
    when !File.writable?(dir)
      # We call File.writable?, not stat.writable?, because you can't tell if a dir is actually
      # writable just from stat; OS mechanisms other than user/group/world bits can affect this.
      warn "#{name} is not writable: #{dir}"
    when stat.world_writable? && !stat.sticky?
      warn "#{name} is world-writable: #{dir}"
    else
      break dir
    end
  end or raise ArgumentError, "could not find a temporary directory"
end