Кажется, это должно быть легко, но я просто не могу этого понять. Как удалить самый последний символ файла с помощью Ruby IO?
Я просмотрел ответ на удаление последней строки file с Ruby, но не до конца понимал его, и должен быть способ попроще.
Любая помощь?
2 ответа
Есть File.truncate
:
усечь (имя_файла, целое число) → 0
Обрезает файл
file_name
до максимальной длиныinteger
байт. Доступно не на всех платформах.
Таким образом, вы можете сказать такие вещи, как:
File.truncate(file_name, File.size(file_name) - 1)
Это должно усечь файл с помощью одного системного вызова, чтобы настроить размер файла в файловой системе, ничего не копируя.
Обратите внимание, что доступно не на всех платформах . File.truncate
должен быть доступен для чего угодно unixy (например, Linux или OSX), я не могу сказать ничего полезного о поддержке Windows.
Я предполагаю, что вы имеете в виду текстовый файл. Обычный способ изменить это - прочитать его, внести изменения, а затем записать новый файл:
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))
Похожие вопросы
Связанные вопросы
Новые вопросы
ruby
Ruby - это многоплатформенный динамический объектно-ориентированный интерпретируемый язык с открытым исходным кодом. Тег [ruby] предназначен для вопросов, связанных с языком Ruby, включая его синтаксис и его библиотеки. Вопросы Ruby on Rails должны быть помечены [ruby-on-rails].