fseek() не работает

Я открыл файл с помощью a и r+, но когда я использую fseek и ftell, указатель файла всегда равен 0. Мой файл выглядит так:

 1 -3     
 2 -8    

И я хочу добавить еще одну строку между ними, но она добавляется в конце после последней строки. Кто-то на другом форуме сказал, что когда вы открываете файл в добавлении, указатель всегда равен нулю, и вы должны открыть его в r+, и если это не сработает, «вы должны прочитать полные данные, а затем вставить данные в переменные и напиши обратно". но я не понимаю, что они имеют в виду.

Может ли кто-нибудь помочь с вставкой чисел в середине файла?

Спасибо!

Будет ли что-то подобное работать? Перенести данные?

    rewind(fp);
    fscanf(fp,"%d",&ch);
    fprintf(fp1,"%d",ch);
    fseek(fp,1,0);
    fscanf(fp,"%d",&ch);
    fprintf(fp1,"%d",ch);

person system    schedule 22.05.2011    source источник
comment
Вы не можете вставлять что-то в середину файла — вы можете только изменять уже существующее.   -  person    schedule 22.05.2011


Ответы (3)


Как уже говорили другие, нет простого способа вставить данные в середину файла. Если вы действительно хотите это сделать, вы можете выполнить следующие шаги:

  1. Создайте второй файл
  2. Скопируйте все данные до места, которое вы хотите вставить, во второй файл.
  3. Вставьте нужную строку во второй файл
  4. Скопируйте оставшиеся данные во второй файл
  5. Удалить исходный файл
  6. Переименуйте второй файл

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

person Luiz Rodrigo    schedule 22.05.2011

Не существует режима open, который позволит вам «вставлять» данные в файл в произвольной точке. Единственное место, где вы можете добавить данные без перезаписи существующих данных, — это конец файла (то, что вы получаете, открывая режим «а»).

Если вы хотите вставить в случайную позицию, вам нужно сделать это самостоятельно.

Один из самых простых способов — полностью перезаписать файл (перенести начало старого файла в новый файл, добавить свои данные в новый файл, перенести остальную часть старого файла и переименовать/переписать в конце) .

Сложный способ: вам нужно вручную «переместить» все данные из точки вставки в конец файла. Это не тривиально, чтобы получить право.

person Mat    schedule 22.05.2011

Нет простого способа вставить данные в середину файла. Файл в основном представляет собой массив символов. Чтобы добавить символ посередине, вам нужно скопировать все, что следует за точкой вставки, на одно место вниз. С файлом вам нужно прочитать данные, которые следуют, и записать их после вашего добавления.

Как правило, когда вы хотите сделать что-то подобное, вы создаете новый файл. Вы копируете в него старый файл до того места, куда хотите вставить, затем записываете данные, которые хотите вставить, затем копируете остальную часть старого файла. Наконец, вы переименовываете новый файл в старый файл.

person andrewdski    schedule 22.05.2011