【发布时间】:2012-10-18 02:33:56
【问题描述】:
我正在尝试检查通过命令行输入的目录是否包含具有特定文件扩展名的文件。例如,如果我有一个文件夹“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 之前检查整个数组?
上面的一些代码还没有完成,我只是想问是否有任何方法可以检查目录中是否有特定扩展名的文件。到目前为止,我无法通过搜索找到任何内容。
【问题讨论】:
-
考虑使用 -f 文件名和 -d 目录等参数并使用 optparse 解析它们。这不是一个好问题的原因是你的逻辑太复杂了。
标签: ruby file directory file-extension