我有一个脚本执行以下操作(我的问题在步骤5中):
打开temp.txt并将解析结果写入其中。写入" temp.txt"的字符串;是源文件的路径,如下所示:
../../Path/to/source/source_a.c
../../Path/to/othersource/source_b.c
代码如下所示:
#######--STEP 1)
xml_files = Dir['TESTS_*/**/*.xml']
xml_files.each do |file_name|
##parsing logic is here.... I didn't show it---
$my_array = []
#######--STEP 2)
xml_directory = Dir['TESTS_*/*/']
xml_directory.each do |folder|
FileUtils.mkdir_p(File.join(folder, 'new_Directory'))
end
#######--STEP 3)
tmp_file = File.expand_path(File.dirname(file_name)) + "/temp.txt"
#######--STEP 4)
File.open(tmp_file, 'w') {|f| f.write $my_array.join("\n")}
#######--STEP 5)
tmp_file.each_line do |file_name |
FileUtils.cp(file_name, 'new_Directory')
end
end
一切都很好,但来自" temp.txt"的源文件文件未复制。没有错误。是否可以在步骤3)中创建temp.txt文件?这种创建文件的方式,而不是写入它们,我已经在其他脚本中完成了它的工作。当我打印" p tmp_file"我明白了:
"C:/Project/TESTS_A/myTestsA/temp.txt"
"C:/Project/TESTS_B/myTestsB/temp.txt"
知道出了什么问题吗?
答案 0 :(得分:2)
移动STEP2:
xml_directory = Dir['TESTS_*/*/']
xml_directory.each do |folder|
FileUtils.mkdir_p(File.join(folder, 'new_Directory'))
end
排在最前面的Dir[...]
(之前)。原因是Dir#[]
更改Dir.pwd
并且嵌套时,上面的块只返回空集。因为它正在相对执行到当前目录。
要查看自己发生了什么,请尝试puts Dir.pwd
无处不在。
答案 1 :(得分:0)
感谢@mudasobwa:
首先,我在问题中忘记了一行,正好在步骤2中。原来的是:
#######--STEP 2)
Dir.chdir ../../../../ do
xml_directory = Dir['TESTS_*/*/']
xml_directory.each do |folder|
FileUtils.mkdir_p(File.join(folder, 'new_Directory'))
end
正如您所看到的,我在错误的地方更改了ruby脚本的工作目录(../../../../),这就是问题所在。所以我应该在步骤5)中更改工作目录,以便代码看起来像:
#######--STEP 5)
Dir.chdir ../../../../ do
tmp_file.each_line do |file_name |
FileUtils.cp(file_name, 'new_Directory')
end
end