我正在编写一个程序,我循环遍历目标文件夹的子文件夹中的所有文件,并对其中所写的内容进行处理。所以我的本地文件夹看起来像
Folder
--Subfolder
---File
---File
---File
--Subfolder
---File
.
.
.
所以我有一个循环遍历所有子文件夹,每个子文件夹我调用的方法基本上做同样的事情但是在子文件夹中并为每个文件调用另一个方法(解析它是我通过我获得的文件参数Dir.foreach(folder){ |file| method(file)}
命令。
所以它看起来像这样:
Dir.foreach(Dir.pwd){ |folder| call_method(folder) }
def call_method(folder) Dir.foreach(folder){|file| reading_method(file) } end
最后调用的方法(reading_method)应该打开称为C方法,并将文件的完整路径解析为参数(以便C程序可以打开它)所以我在reading_method中使用File.absolute_path(file)
但不是按照我的意愿返回C:/folder/subfolder/file
,而是返回C:/folder/file
跳过子文件夹(因此C程序无法执行)。
有没有办法获得该文件的完整路径?
感谢您的帮助
编辑:以下是要求的完整代码
## Module
module GBK_Reader
PATH = "Z:/Folder/"
SAFETY = true
SAFETY_COUNT = 10
end
## Methods definitions
def read_file(file)
path = File.absolute_path(file)
c_string = `C:/Code/GBK_Reader/bin/Debug/GBK_Reader.exe #{path}`
return c_string.split(/ /).collect!{|spec| spec.to_i}
end
def read_folder(folder)
Dir.foreach(folder){ |file|
next if File.extname(file) != ".gbk"
temp = read_file(file)
#$bacteria_specs[0] += temp[0]
#$bacteria_specs[1] += temp[1]
}
return $bacteria_specs
end
## Main
# Look for folder
Dir.chdir(GBK_Reader::PATH)
puts "Directory found"
# Cycle through all sub-folders
$high_gc = {} #Hash to store high GC content bacterias
$count = 0
puts "Array variable set"
Dir.foreach(Dir.pwd){ |file|
next if file == "." || file == ".."
break if $count >= GBK_Reader::SAFETY_COUNT
$count += 1 if GBK_Reader::SAFETY
$bacteria_specs = [0.00, 0.00, 0.00]
$path = File.expand_path(file)
if File.directory?(file)
# Cycle through all .gbk files in sub-folder and call C program
read_folder(file)
else
# Call C program to directly evaluate GC content
c_string = read_file(file) if File.extname(file) == ".gbk"
$bacteria_specs[0] = c_string[0].to_i
$bacteria_specs[1] = c_string[1].to_i
end
# Evaluate GC content and store suitable entries
$bacteria_specs[2] = ($bacteria_specs[0]/$bacteria_specs[1])*100.00
$high_gc[file] = $bacteria_specs if $bacteria_specs[2] > 60
}
# Display suitable entries
puts "\n\n\n"
puts $high_gc
gets.chomp
答案 0 :(得分:0)
好的,我可能已经找到了一些东西,但它看起来很难看,所以如果有人有更好的解决办法,请继续。
我编辑了read_folder方法来解析read_file方法的完整路径,如下所示:
def read_folder(folder)
Dir.foreach(folder){ |file|
next if File.extname(file) != ".gbk"
path = File.absolute_path(folder)+'/'+File.basename(file)
temp = read_file(path)
$bacteria_specs[0] += temp[0]
$bacteria_specs[1] += temp[1]
}
return $bacteria_specs
end
我确实得到了我期望的道路。 (虽然我打电话给C程序仍然失败,所以我不得不去其他地方检查:D)