2009-12-17 4 views
-1

Привет Я работаю на платформе C на Unix. Скажите, как добавить одну строку до последней строки в C. Я использовал fopen в режиме добавления, но я не могу добавить одну строку до последней строки.Как добавить одну строку до последней строки в C

Я просто хочу написать вторую последнюю строку в файле.

+3

Текст вопроса вводит в заблуждение: «append» всегда подразумевает «в конце», но то, что вы хотите сделать, - «вставить». –

+0

было предложено несколько решений, все они оказались запросом «gimme da code». Если это домашнее задание, оно должно быть помечено так. – lorenzog

ответ

5

Вам не нужно перезаписывать весь файл. Вы просто должны:

  • открыть файл в режиме «Вайсс»,
  • прочитать файл, чтобы найти последнюю строку: сохранить свои позиции (ftell/ftello) в файле и его содержание
  • идти вернуться к началу последней строки (fseek/fseeko)
  • пишет все, что вы хотите до последней строки
  • написать последнюю строку.
  • закрыть файл.
+0

+1, избили меня на несколько секунд :-) –

2

Append добавляет только к концу, а не к середине.

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

+0

Нет необходимости писать весь файл: вы можете писать только с точки вставки. – mouviciel

3

Невозможно сделать это непосредственно в стандартном C, главным образом потому, что в этой операции поддерживается несколько файловых систем. Самый простой способ - прочитать файл в структуре памяти (где вы, вероятно, все равно), вставить строку в память, а затем снова написать всю структуру, перезаписав исходный файл.

+0

Нет необходимости писать весь файл: вы можете писать только с точки вставки. – mouviciel

+0

В этом случае вам нужно найти точку вставки. Обратите внимание, что я сказал «самый простой способ» - есть, конечно, многие другие. – 2009-12-17 10:06:39

1

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

Чтобы найти место: Искать до конца, минус размер буфера. Читайте буфер, ищите newline. Если не найдена, найдите назад два размера буфера и повторите попытку.

Вам необходимо использовать режим r + для fopen.

О, и вам нужно быть осторожным в текстовом и двоичном режимах. Вам нужно использовать двоичный режим, так как в текстовом режиме вы не можете вычислять позиции перехода, вы можете только перейти к местоположению, которое вы получили от ftell. Вы можете обойти это, прочитав весь файл и позвонив ftell в начале каждой строки. Для больших файлов это будет медленным.

+1

@Sachin - Nope. Это не rentacoder, это сайт помощи. Мы поможем вам, но мы не будем писать ваши домашние задания (или задания) для вас. Если вы новичок в C, все в порядке, но отношение «дайте мне отношение» не даст вам нигде на этом сайте. –

1

Используйте fseek, чтобы перейти к концу файла, прочитать назад, пока не встретите новую строку. Затем вставьте свою линию. Возможно, вы захотите сохранить «последнюю строку», которую вы читаете, подсчитав количество символов, которые вы читаете в обратном порядке, затем strncpy на правильно выделенный буфер.

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