代码之家  ›  专栏  ›  技术社区  ›  hagello

鲁比是伊奥。copy_流与readline不能正常交互?

  •  1
  • hagello  · 技术社区  · 6 年前

    在Ruby脚本中,我想处理源文件的前几行(使用 .readline )只需将源文件的其余部分复制到目标文件(使用 IO.copy_stream 在打开的文件上)。然而 伊奥。复制流 似乎看不到源文件的其余部分。

    下面是如何重现这个问题:

    require 'rspec'
    
    require 'tempfile'
    
    def file_create(content)
      Tempfile.open('foo') do |src|
        src.print content
        src.close
        yield src.path
      end
    end
    
    describe :copy_stream do
      it 'copies the content of an open file' do
        file_create("a\nb\n") do |path|
          open(path) do |from|
            Tempfile.open('bar') do |to|
              IO.copy_stream(from, to)
              to.close
              expect(IO.read(to.path)).to eq "a\nb\n"
            end
          end
        end
      end
    
      it 'copies the rest of an open file' do
        file_create("a\nb\n") do |path|
          open(path) do |from|
            Tempfile.open('bar') do |to|
              to.print from.readline
              IO.copy_stream(from, to)
              to.close
              expect(IO.read(to.path)).to eq "a\nb\n"
            end
          end
        end
      end
    end
    

    这就是输出:

    Failures:
    
      1) copy_stream copies the rest of an open file
         Failure/Error: expect(IO.read(to.path)).to eq "a\nb\n"
    
           expected: "a\nb\n"
                got: "a\n"
    
           (compared using ==)
    
           Diff:
           @@ -1,3 +1,2 @@
            a
           -b
    [...]
    2 examples, 1 failure
    
    Failed examples:
    
    rspec /workspaces/socbm378/johanabt/incstrip/spec/copy_stream_spec.rb:27 # 
    copy_stream copies the rest of an open file
    

    为什么 copy_stream 无法复制文件的其余部分?

    我找到了一个简单的解决方法,但我想了解潜在的问题。以下是我的工作:

    def copy_stream2(from, to)
      while (buf = from.read(16 * 1024))
        to.print buf
      end
    end
    
    0 回复  |  直到 6 年前