如何使用Ruby的文件方法将一个文件的内容复制到另一个文件?

时间:2011-12-05 11:51:54

标签: ruby

我想使用Ruby的文件方法将一个文件的内容复制到另一个文件。

如何使用文件方法使用简单的Ruby程序来完成它?

7 个答案:

答案 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_streamFile#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)

如果您希望暂时保留文件内容,也可以 使用File.binreadFile.binwrite。 (其他答案使用的是即时copy_stream。)

如果内容为纯文本文件以外的 ,例如图片,则使用基本File.readFile.write将无效。

temp_image = Tempfile.new('image.jpg')
actual_img = IO.binread('image.jpg')
IO.binwrite(temp_image, actual_img)

来源:binreadbinwrite