类 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