⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 13 - backing up to versioned filenames.rb

📁 O Reilly Ruby Cookbook source code
💻 RB
字号:
class File  def File.versioned_filename(base, first_suffix='.0')    suffix = nil    filename = base    while File.exists?(filename)      suffix = (suffix ? suffix.succ : first_suffix)             filename = base + suffix    end      return filename  endend5.times do |i|  name = File.versioned_filename('filename.txt')  open(name, 'w') { |f| f << "Contents for run #{i}" }  puts "Created #{name}"end# Created filename.txt# Created filename.txt.0# Created filename.txt.1# Created filename.txt.2# Created filename.txt.3#---require 'ftools'class File def File.to_backup(filename, move=false)    new_filename = nil    if File.exists? filename      new_filename = File.versioned_filename(filename)      File.send(move ? :move : :copy, filename, new_filename)    end    return new_filename  endend#---File.to_backup('filename.txt')              # => "filename.txt.4"File.to_backup('filename.txt')              # => "filename.txt.5"#---File.to_backup('filename.txt', true)        # => "filename.txt.6"File.exists? 'filename.txt'                 # => false#---File.to_backup('filename.txt')              # => nil#---200.times do |i|  name = File.versioned_filename('many_versions.txt', '.000')  open(name, 'w') { |f| f << "Contents for run #{i}" }  puts "Created #{name}"end# Created many_versions.txt# Created many_versions.txt.000# Created many_versions.txt.001# ...# Created many_versions.txt.197# Created many_versions.txt.198#---class File  def File.versioned_file(base, first_suffix='.0', access_mode='w')    suffix = file = locked = nil    filename = base    begin      suffix = (suffix ? suffix.succ : first_suffix)             filename = base + suffix      unless File.exists? filename        file = open(filename, access_mode)        locked = file.flock(File::LOCK_EX | File::LOCK_NB)        file.close unless locked      end    end until locked    return file  endendFile.versioned_file('contested_file')  # => #<File:contested_file.0>File.versioned_file('contested_file')  # => #<File:contested_file.1>File.versioned_file('contested_file')  # => #<File:contested_file.2>#---

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -