我正在尝试检查通过命令行输入的目录是否包含具有特定文件扩展名的文件。例如,如果我有一个文件夹“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
那么应该做的是检查首先是否只有一个参数,如果是,那么它会检查它是否是文件或目录,否则它会输出错误,那么我正在做的是检查它是否是一个目录。如果是这样,我需要检查目录是否实际包含.vm文件。我尝试pn.each_child {|f| f.extname == '.vm'}
,但只检查第一个值,然后才返回true。除了设置一些布尔值之外,还有更简单的方法来检查整个数组吗?
那里的一些代码没有完成,我只是问是否有办法检查目录中是否有某个扩展名的文件。到目前为止,我找不到任何搜索内容。
答案 0 :(得分:4)
str = ARGV[0]
proc = ->(f) { puts "doing something with #{f.path}" }
if Dir.exists?(str)
Dir.glob(File.join(str, File.join('**', '*.vm'))).each do |entry|
proc[File.open(entry)]
end
elsif File.exists?(str) && File.extname(str) == '.vm'
proc[File.open(str)]
else
puts "couldn't do anything with #{str}"
end
答案 1 :(得分:1)
Dir["Folder1/Folder2/*.vm"].empty?
如果false
中有.vm
个文件,将返回Folder1/Folder2
。
答案 2 :(得分:1)
require 'pathname'
def directory_has_vm_files?(path)
Dir.glob(path.join('*.vm')).size > 0
end
unless ARGV[0]
puts %{
Proper usage is:
ruby vmtranslator.rb file_directory or file.vm
OR
ruby vmtranslator.rb file_directory
where file_directory has multiple vm files
}
else
path = Pathname.new(ARGV[0])
if path.exist?
if path.file?
if File.extname(path) == '.vm'
puts "Valid VM file"
else
puts "Not a VM file"
end
else
if directory_has_vm_files?(path)
puts "Valid Directory - contains vm files"
else
puts "#{path} does not contain any VM file"
end
end
else
puts "Invalid path"
end
end