Ищу начало файла - PullRequest
       18

Ищу начало файла

1 голос
/ 20 апреля 2009

У меня есть небольшой блок кода, который должен добавить текст в начало файла. Однако это все еще только добавляет в конец файла. Я думал, что при перемотке указатель указывается на переднюю часть файла, поэтому, когда я добавил текст с помощью fprintf, его следует добавить на переднюю часть. Как я могу это изменить?

fp = fopen("Data.txt", "a");
rewind(fp);
fprintf(fp, "%s\n", text);
fclose(fp);

Текст - это массив символов, добавляемый в начало файла

Ответы [ 3 ]

12 голосов
/ 20 апреля 2009

1) Не открывать в режиме добавления.

Когда вы открываете в режиме добавления, все записи идут в конец файла, независимо от позиции поиска.

http://www.opengroup.org/onlinepubs/009695399/functions/fopen.html

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

2) Открытие без «а» все равно не будет делать то, что вы хотите. Вставить в файл с помощью файловых операций ANSI / POSIX невозможно, поскольку, учитывая то, как большинство файловых систем хранят свои данные, вставка не является простой операцией.

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

4 голосов
/ 20 апреля 2009

Вы можете заменить данные в файле, но вы не можете добавить или вставить их в любом месте, кроме самого конца файла.

0 голосов
/ 24 апреля 2009

Просто создайте новый файл со своими данными, а затем добавьте старые данные в этот файл, который вы создали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...