我想使用Ruby的文件方法将一个文件的内容复制到另一个文件。
如何使用文件方法使用简单的Ruby程序来完成它?
答案 0 :(得分:18)
有一个非常方便的方法 - IO#copy_stream method
- 请参阅ri copy_stream
的输出
使用示例:
File.open('src.txt') do |f|
f.puts 'Some text'
end
IO.copy_stream('src.txt', 'dest.txt')
答案 1 :(得分:11)
对于那些感兴趣的人,这里是IO#copy_stream
,File#open + block
答案的变体(针对ruby 2.2.x写的,3年太晚了)。
copy = Tempfile.new
File.open(file, 'rb') do |input_stream|
File.open(copy, 'wb') do |output_stream|
IO.copy_stream(input_stream, output_stream)
end
end
答案 2 :(得分:8)
作为预防措施,我建议使用缓冲区,除非您能保证整个文件始终适合内存:
File.open("source", "rb") do |input|
File.open("target", "wb") do |output|
while buff = input.read(4096)
output.write(buff)
end
end
end
答案 3 :(得分:3)
这是我的实施
class File
def self.copy(source, target)
File.open(source, 'rb') do |infile|
File.open(target, 'wb') do |outfile2|
while buffer = infile.read(4096)
outfile2 << buffer
end
end
end
end
end
用法:
File.copy sourcepath, targetpath
答案 4 :(得分:1)
这是一种快速而简洁的方法。
# Open first file, read it, store it, then close it
input = File.open(ARGV[0]) {|f| f.read() }
# Open second file, write to it, then close it
output = File.open(ARGV[1], 'w') {|f| f.write(input) }
运行它的一个例子是。
$ ruby this_script.rb from_file.txt to_file.txt
这会运行 this_script.rb 并通过命令行接收两个参数。在我们的例子中,第一个是 from_file.txt (正在复制的文本)和第二个参数 second_file.txt (正在复制的文本)。
答案 5 :(得分:0)
这是使用ruby文件操作方法执行此操作的简单方法:
source_file, destination_file = ARGV
script = $0
input = File.open(source_file)
data_to_copy = input.read() # gather the data using read() method
puts "The source file is #{data_to_copy.length} bytes long"
output = File.open(destination_file, 'w')
output.write(data_to_copy) # write up the data using write() method
puts "File has been copied"
output.close()
input.close()
您还可以使用File.exists?
检查文件是否存在。如果它确实!!这将返回一个布尔值为真的
答案 6 :(得分:0)