将文件复制到目录?

时间:2013-12-29 02:59:35

标签: ruby

我有一个Ruby程序,可以将文件从源文件夹复制到目标文件夹。

C:\srcdir\testfile.txt是源文件夹,C:\targetdir是目标文件夹。

该程序不断报告错误:

copy_files.rb:11:in block in <main>': uninitialized constant FileUtils (NameError)

为什么?这是我的代码:

sourcedir = "C:\\srcdir"
targetdir = "C:\\targetdir"
Dir.foreach(sourcedir){
  |f|
  filepath = "#{sourcedir}\\#{f}"
  if !(File.directory?(filepath)) then
    if File.exist?("#{targetdir}\\#{f}") then
      puts("#{f} already exists in target directory (not copied)")
    else
      FileUtils.cp(filepath, targetdir)
      puts("Copying... #{filepath}")
    end
  end
}

2 个答案:

答案 0 :(得分:2)

FileUtils是一个模块,它不是Ruby核心的一部分。您需要require才能使用它,如下所示:

require 'fileutils'

此stackoverflow问题解释了如何使用FileUtils移动文件:How do I move a file with Ruby?

以下是 Ruby 1.9.3 的FileUtils模块的文档:http://ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html

答案 1 :(得分:0)

这是未经测试的代码,但我的编写方式更接近:

SOURCEDIR = 'C:/srcdir'
TARGETDIR = 'C:/targetdir'

Dir.foreach(SOURCEDIR) do |f|
  filepath = File.join(SOURCEDIR, f)
  if !File.directory?(filepath) 
    if File.exist?(File.join(TARGETDIR, f) 
      puts "#{ f } already exists in target directory (not copied)"
    else
      print "Copying #{ filepath }... "
      FileUtils.cp(filepath, TARGETDIR)
      puts "done"
    end
  end
end

当然,你的操作系统会让它更容易;批处理和shell文件以及操作系统级命令就是为此而创建的。