2015-12-07 3 views
0

У меня есть сценарий, который сделать следующее (моя проблема в шаге 5):«FileUtils.cp» не работает правильно -ruby

  1. Перейти рекурсивно через некоторые каталоги, анализировать XML-файлы и сохранять результаты в массив
  2. Создать новый каталог «new_directory» в каждом из каталогов, где XML файлы помещаются
  3. Сделайте то же самое, как и в 2), но создавать текстовые файлы «temp.txt»
  4. Откройте temp.txt и записать в него результаты синтаксического анализа. Строки, написанные на «temp.txt» являются пути к исходным файлам, как следующее:

    ../../Path/to/source/source_a.c 
    ../../Path/to/othersource/source_b.c 
    
  5. И на последнем этапе я пытаюсь скопировать эти исходные файлы из temp.txt в новый каталог «new_directory»

код выглядит следующим образом:

#######--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? Такой способ создания файлов и чем писать для них я делал в других сценариях и worked.When я печатаю «р tmp_file» Я получаю это:

"C:/Project/TESTS_A/myTestsA/temp.txt" 
"C:/Project/TESTS_B/myTestsB/temp.txt" 

Любая идея, что происходит не так?

ответ

2

Move 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 всюду.

0

Thx в @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 

Как вы можете видеть, что я изменил рабочий каталог (../../../../) сценария рубинового на неправильном месте, и это была проблема. Поэтому я должен изменить рабочий каталог на шаге 5), чтобы код выглядел следующим образом:

#######--STEP 5) 
Dir.chdir ../../../../ do  
tmp_file.each_line do |file_name | 
     FileUtils.cp(file_name, 'new_Directory') 
     end 
    end 
+0

Нельзя публиковать это как еще один ответ. – mudasobwa

Смежные вопросы