我有一个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
}
答案 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文件以及操作系统级命令就是为此而创建的。