0 / 0 / 1
Регистрация: 10.05.2013
Сообщений: 37
1

Обновление счётчика при записи в файл

15.09.2013, 03:56. Показов 1023. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Товарищи форумчане! Бросаю Вам флаг помощи.
Проблема такого плана: ведётся запись массива структур в файл. В начале файла записывается число этих самых структур, которые непосредственно входят в массив структур :-)
Например, структура "Имя". Запрашивается, сколько имён будет введено и это число помещается в начале файла. Ну а дальше записываются непосредственно сами элементы структур (в данном случае, имена).

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

Огромное Вам спасибо :-)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2013, 03:56
Ответы с готовыми решениями:

Обновление счётчика при записи в файл
Добрый день. Проблема такого плана: ведётся запись массива структур в файл. В начале файла...

Обновление счётчика количества просмотров фотографии при закрытии фрейма
Чтоб обновить значения приходиться постоянно обновлять страничку нажимая ф5. Как подправить скрипт...

Связь между таблицами.Обновление одной записи при обновлении другой записи
Всем привет. Делаю БД для курсового проекта. Есть БД сотрудников организаций. Есть таблица...

Обновление поля счетчика
Ребят подскажите как поля типа счетчик обновить? ЧТоб при удалении какой либо записи из набора...

7
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 06:05 2
Для примера код функции, в которой происходит добавление записей (дисков) в файл. В начале файла записано количество записей (дисков) в файле. При добавлении новых, эта запись перезаписывается:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void addvd() // создание базы и добавление дисков
{   
    cout << "\n\nКоличество dvd дисков = ";
    int t; // количество добавляемых дисков
    (cin >> t).get();
 
    int n = 0; // количество дисков в файле (записывается в первой строке)
  
  //запись в файл
 fstream f("f.txt", ios::in | ios::out | ios::binary);
 if (!f.is_open()) // если файла не существует
 {
    f.open("f.txt", ios::out | ios::binary);
    f.write((const char*)&t, sizeof(t)); // записываем в файл количество дисков
    f.close();
 }
 else // если файл существует
 {
    f.read((char*)&n, sizeof(n));         // читаем количество дисков в файле
    f.seekg(0);                          // возвращаем курсор в начало файла
    n += t;                              // новое количество дисков в файле
    f.write((const char*)&n, sizeof(n)); // записываем новое количество дисков в файле
    f.close();
 }
 
 f.open("f.txt", ios::app); // открываем файл для дозаписи
 
 
 for(int i = 0; i < t; i++)
 {  
    dvd temp;
 
    cout << "\nНазвание фильма: ";           getline(cin, temp.namefilm);  f << temp.namefilm << '\n';
    cout << "Имя режисера: ";                getline(cin, temp.namereg);   f << temp.namereg  << '\n';
    cout << "Продолжительность в минутах: "; cin  >> temp.prodol;          f << temp.prodol   << '\n';
    cout << "Цена: ";                        (cin >> temp.cena).get();     f << temp.cena     << '\n';
 }
 
 f.close(); 
 
}
1
0 / 0 / 1
Регистрация: 10.05.2013
Сообщений: 37
15.09.2013, 17:31  [ТС] 3
Цитата Сообщение от alsav22 Посмотреть сообщение
Для примера код функции, в которой происходит добавление записей (дисков) в файл. В начале файла записано количество записей (дисков) в файле. При добавлении новых, эта запись перезаписывается:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void addvd() // создание базы и добавление дисков
{   
    cout << "\n\nКоличество dvd дисков = ";
    int t; // количество добавляемых дисков
    (cin >> t).get();
 
    int n = 0; // количество дисков в файле (записывается в первой строке)
  
  //запись в файл
 fstream f("f.txt", ios::in | ios::out | ios::binary);
 if (!f.is_open()) // если файла не существует
 {
    f.open("f.txt", ios::out | ios::binary);
    f.write((const char*)&t, sizeof(t)); // записываем в файл количество дисков
    f.close();
 }
 else // если файл существует
 {
    f.read((char*)&n, sizeof(n));         // читаем количество дисков в файле
    f.seekg(0);                          // возвращаем курсор в начало файла
    n += t;                              // новое количество дисков в файле
    f.write((const char*)&n, sizeof(n)); // записываем новое количество дисков в файле
    f.close();
 }
 
 f.open("f.txt", ios::app); // открываем файл для дозаписи
 
 
 for(int i = 0; i < t; i++)
 {  
    dvd temp;
 
    cout << "\nНазвание фильма: ";           getline(cin, temp.namefilm);  f << temp.namefilm << '\n';
    cout << "Имя режисера: ";                getline(cin, temp.namereg);   f << temp.namereg  << '\n';
    cout << "Продолжительность в минутах: "; cin  >> temp.prodol;          f << temp.prodol   << '\n';
    cout << "Цена: ";                        (cin >> temp.cena).get();     f << temp.cena     << '\n';
 }
 
 f.close(); 
 
}
спасибо
только тут операции чтения/записи/добавления идёт через функции fstream. Следовательно, "обновление" счётчика тоже.
а как можно сделать аналогичное через функции FILE?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 17:56 4
Цитата Сообщение от fktrctq0321 Посмотреть сообщение
а как можно сделать аналогичное через функции FILE?
Аналогично. Если функции чтения\записи знаете, то переделать несложно.
1
0 / 0 / 1
Регистрация: 10.05.2013
Сообщений: 37
15.09.2013, 18:30  [ТС] 5
Цитата Сообщение от alsav22 Посмотреть сообщение
Аналогично. Если функции чтения\записи знаете, то переделать несложно.
Не то, чтобы не знаю функции, но конкретно в этом случае "обновить" счётчик не получается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cout << "Сколько хотите стран добавить?\t";
unsigned short number_country;
cin >> number_country;
               
FILE *f;
f=fopen("info.txt","r");
int n=0;
fscanf(f,"%i",&n);
 
/*вот тут к n необходимо прибавить number_country и перезаписать в начале файла, 
не теряя (!) данных после. Не знаю, как это слелать.*/
fclose(f);
        
 
//дозапись
FILE *f_in; 
f_in=fopen("info.txt","at");
//и так далее...
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 18:40 6
Цитата Сообщение от fktrctq0321 Посмотреть сообщение
Не то, чтобы не знаю функции,
Раз знаете, то берёте код (2 пост) и переделывате его под С.
0
0 / 0 / 1
Регистрация: 10.05.2013
Сообщений: 37
15.09.2013, 18:45  [ТС] 7
Цитата Сообщение от alsav22 Посмотреть сообщение
Раз знаете, то берёте код (2 пост) и переделывате его под С.
Написал же, что не знаю как конкретно в данном случае сделать это. Не получается вначале файла перезаписать число подобным образом:
C++
1
2
n=n+number_country;
n=fseek(f,0L,SEEK_SET);
Скажете, в чём ошибка?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 18:53 8
Цитата Сообщение от fktrctq0321 Посмотреть сообщение
Написал же, что не знаю как конкретно в данном случае сделать это.
Там где вы это написали, я не вижу кода из 2-го поста. Здесь форум С++, а не С. На этом, пожелаю вам удачи...
0
15.09.2013, 18:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2013, 18:53
Помогаю со студенческими работами здесь

Обновление счетчика в таблице
Проблема такая: база Accsess. Set db = Server.CreateObject('ADODB.Connection') db.Open...

Обновление счетчика (поля) в БД
У себя на форме я из базы данных удаляю одну строку но проблема в том что счетчик а именно айди...

Независимая цикличная работа и обновление счетчика.
Доброго времени суток. Я в js нуб. Есть на сайту обратный счётчик, вызывается таким образом: ...

Асинхронное обновление счетчика пользователей на сайте
Есть счетчик пользователей. Вот он: mysql_connect('localhost', 'user_name', 'password');...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru