fseek () не работает - PullRequest
       16

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

1 голос
/ 22 мая 2011

Я открыл файл, используя 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);

Ответы [ 3 ]

2 голосов
/ 22 мая 2011

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

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

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

1 голос
/ 22 мая 2011

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

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

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

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

0 голосов
/ 22 мая 2011

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

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

...