2013-11-24 3 views
3

Я пишу программу на C, которая записывает в файл txt. Первая строка предназначена для числа, которое я хочу регулярно обновлять. Проблема, с которой я сталкиваюсь, заключается в том, что она начинается с 1, и когда я добираюсь до номера 10, она перезаписывает следующий символ в файле. Это то, что я получаю:Перезаписать одиночную строку в txt-файле

До:

9 
hello 

После:

10 
ello   

Я хочу это:

10 
hello 

Как мне это сделать? Заранее спасибо

PS: Это мой код:

int nkv = 9; 
char nkvst[10]; 
sprintf(nkvst, "%d\n", nkv); 
fputs(nkvst, fp[3]); 
fputs("hello", fp[3]); 
fseek(fp[3], 0, SEEK_SET); 
nkv = 10; 
sprintf(nkvst, "%d\n", nkv); 
fputs(nvkst, fp[3]); 
+0

показать нам свой код .. его трудно отлаживать без него – sukhvir

+0

Обновлено. fp объявляется как FILE * fp []; как я хочу создавать и редактировать несколько файлов – bex91

ответ

1

Первое решение было бы избежать перезаписи в открытом файле:

  1. чтения и хранения данных от всей файл
  2. изменить то, что вам нужно
  3. переписать весь файл с новыми данными

Если вы все еще хотел замарать вокруг вашего файла, который вы могли бы написать свои номера с некоторыми ' ' пространств в качестве резерва:

sprintf(nkvst, "%11d\n", nkv); 

Если у вас, например, число -2147483648, это заняло бы 11 символов. Таким образом, для вас доступно 11 символов.

+0

Спасибо. Я подумал об этом, но мне было интересно, будет ли неэффективно переписывать весь файл снова и снова. Я думаю, что я поеду с опцией пустых мест, учитывая, что, вероятно, не очень «дорого» выделять память для пробелов. Благодаря! – bex91

3

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

Например, если ваш номер не будет выше, чем 999999, то:

int nkv = 9; 
char nkvst[10]; 
sprintf(nkvst, "%.6d\n", nkv); 
fputs(nkvst, fp[3]); 
fputs("hello", fp[3]); 
fseek(fp[3], 0, SEEK_SET); 
nkv = 10; 
sprintf(nkvst, "%.6d\n", nkv); 
fputs(nvkst, fp[3]); 
+0

Спасибо, я поеду с этой опцией! – bex91

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