файл ruby ​​не создается новым, когда «создается» несколько раз в каждом цикле - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь запустить регулярное выражение для файлов какой-либо подпапки. Очевидно, это приводит к нежелательному поведению. Похоже, что ruby ​​не создает новый временный файл, а просто открывает и продолжает. Каждый раз, когда я запускаю скрипт, кажется, что весь файл (или несколько файлов?) Добавляется и растет и растет и растет.

Первый шаг моей стратегии выглядит следующим образом

  1. Я обнаруживаю файлы в подкаталогах через Dir.glob, сохраняю full_paths в массиве и считываю файлы в буферный файл в каждом цикле.
  2. Я закрываю файл и запускаю регулярные выражения над буфером

Второй шаг состоит из

  1. в другом цикле каждого массива, состоящего из полных путей файлов, которыми я хочу манипулировать,
  2. Я создаю временный файл в той же папке. каждый раз с тем же именем,
  3. удалить оригинальный файл,
  4. записать буфер regex во временный файл,
  5. переименовать временный файл после исходного файла.

Итак: В том же каталоге, что и исходный файл

fh2 = File.new(temp_filename, "w:UTF-8")
count = fh2.write(file_buffer)
puts "That was #{count} bytes of data to #{temp_filename}"
fh2.close

count постоянно увеличивается с каждым файлом, который обрабатывается / создается таким образом.

Может быть, он не создает новый временный файл из-за того же дескриптора file_handle, того же имени или опции w вместе с File.new?

Спасибо

1 Ответ

0 голосов
/ 05 сентября 2018

нашел мою ошибку. Я не очистил буфер (и буфер не является локальным для блока!)

# load file in buffer
fh = File.open(file,"r+:UTF-8")

while (line = fh.gets) 
file_buffer += line
end

fh.close

Нить может быть закрыта. Извините, что потратил ваше время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...