我正在尝试检查通过命令行输入的目录是否包含具有特定文件扩展名的文件。例如,如果我有一个文件夹“Folder1”,其中有另一个文件夹“Folder 2”,Folder2 包含多个文件,“test.asm”、“test.vm”、“test.tst”。我通过这样的命令行获取目录或文件
ruby translator.rb Folder1/Folder2
或者
ruby translator.rb Folder1/Folder2/test.vm
我想做的是错误检查。我已经检查了输入是否是一个文件夹,现在我需要检查该文件夹是否实际上包含一个 .vm 文件。到目前为止我所做的是:
require 'pathname'
pn = Pathname.new(ARGV[0])
if ARGV.size != 1
puts "Proper usage is: ruby vmtranslator.rb file_directory\file.vm \nOR \nruby vmtranslator.rb file_directory\ where file_directory has multiple vm files test".split("\n")
elsif !pn.exist? && !pn.directory?
puts "Something is wrong with the file"
puts "Either try another file or check the file extension"
elsif pn.directory? && pn.children(false).extname.include?('.vm')
puts "this should print if Folder1 is the folder, but not if Folder2 is.."
vm_file1 = File.open("OPEN FILES WITH .vm AS EXTENSION)
elsif pn.exist? || pn.file?
puts "this is right"
vm_file = File.open(ARGV[0], "r")
asm_file = File.new(ARGV[0].sub('.vm', '.asm'), "w")
end
所以应该做的是首先检查是否只有1个参数,如果是,那么它检查它是文件还是目录,否则它会输出错误,然后我正在做的是检查它是否是一个目录。如果是这样,我需要检查该目录是否实际包含 .vm 文件。我试过pn.each_child {|f| f.extname == '.vm'}
了,但它只在返回 true 之前检查第一个值。除了设置一些布尔值之外,还有什么更简单的方法可以在返回 true 之前检查整个数组?
上面的一些代码没有完成,我只是问是否有任何方法可以检查目录中是否有某个扩展名的文件。到目前为止,我的搜索找不到任何东西。