Кажется, это должно быть легко, но я просто не могу этого понять. Как удалить самый последний символ файла с помощью Ruby IO?

Я просмотрел ответ на удаление последней строки file с Ruby, но не до конца понимал его, и должен быть способ попроще.

Любая помощь?

6
Dylan 31 Дек 2013 в 05:46

2 ответа

Лучший ответ

Есть File.truncate:

усечь (имя_файла, целое число) → 0

Обрезает файл file_name до максимальной длины integer байт. Доступно не на всех платформах.

Таким образом, вы можете сказать такие вещи, как:

File.truncate(file_name, File.size(file_name) - 1)

Это должно усечь файл с помощью одного системного вызова, чтобы настроить размер файла в файловой системе, ничего не копируя.

Обратите внимание, что доступно не на всех платформах . File.truncate должен быть доступен для чего угодно unixy (например, Linux или OSX), я не могу сказать ничего полезного о поддержке Windows.

10
mu is too short 11 Мар 2019 в 17:59

Я предполагаю, что вы имеете в виду текстовый файл. Обычный способ изменить это - прочитать его, внести изменения, а затем записать новый файл:

  text = File.read(in_fname)
  File.write(out_fname, text[0..-2])

Вставьте имя файла, из которого вы читаете, для in_fname и имя файла, в который вы пишете, для 'out_fname'. Это может быть один и тот же файл, но если это намерено, безопаснее записывать во временный файл, скопируйте временный файл в исходный файл, а затем удалите временный файл. Таким образом, если что-то пойдет не так до завершения операций, у вас, вероятно, останется либо исходный, либо временный файл. text[0..-2] - это строка, состоящая из всех прочитанных символов, кроме последнего. В качестве альтернативы вы можете сделать это:

  File.write(out_fname, File.read(in_fname, File.stat(in_fname).size-1))
3
Cary Swoveland 1 Фев 2015 в 22:52