0

我需要从 zip 存档中提取单个文件。以下工作在某一时刻工作,然后停止。我已经尝试以最基本的方式从头开始重新编写它几次,但它仍然找不到我正在搜索的文件。

def restore(file)
    #pulls specified file from last commit
    found = []
    #files.each do |file|
        print "Restoring #{file}"
        puts
        Zip::ZipFile.open(".fuzz/commits/#{last_commit}.zip") do |zip_file|
            zip_file.each do |f|

                if f == file.strip
                    if File.exists?(file)
                        FileUtils.mv(file, "#{file}.temp")
                    end

                    FileUtils.cp(f, Dir.pwd)
                    found << file

                    if File.exists?("#{file}.temp")
                        FileUtils.rm_rf("#{file}.temp")
                    end
                else
                    puts "#{file} is not #{f}" #added this to make sure that 'file' was being read correctly and matched correctly.
                end
            end
        end
        print "\r"
        if found.empty? == false
            puts "#{found} restored."
        else
            puts "No files were restored"
        end

    #end
end

“#{file} is not #{f} 显示两个文件,但仍然认为没有匹配项。过去一天我已经为此绞尽脑汁了。我希望我刚刚变得愚蠢并且我缺少明显的缺陷/错字。

4

2 回答 2

1

您作为示例引用的链接有一个很大的不同:

不是f ==,而是"#{f}"==。这基本上是一种神秘的说法f.to_s,这意味着f不是字符串,而是它的 to_s 方法返回文件的名称。所以,尝试替换这个:

if f == file.strip

有了这个:

if f.to_s == file.strip
于 2013-06-06T00:07:16.097 回答
1

我尝试了一些实验,发现f == file.strip不起作用:

但是,这两种方法都有效:

if f.name == file.strip

if f.to_s == file.strip

我个人更喜欢f.name它,因为它使代码更易于阅读和理解。

于 2013-06-06T00:10:07.007 回答