Форум программистов, компьютерный форум CyberForum.ru

Перезапись части информации в файле - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Условие для цикла С++ http://www.cyberforum.ru/cpp-beginners/thread352011.html
Доброго всем времени суток! Помогите пожалуйста человеку который только начал открывать для себя С++ Задача следующая: необходимо запускать программу в цикле столько раз сколько потребует пользователь. В качестве проверки пользователю предлагается сказать Yes или No и цикл должен выполнятся до тех пор пока строка s==Yes Когда выполняю программу выдается следующая ошибка: error C2446: ==:...
C++ Почему так происходит и как это устранить почему если я напишу вот так - #include <stdio.h> #include <iostream> using namespace std; int main() { freopen("output.txt", "w", stdout); printf("Hello, world!\n"); fclose(stdout); http://www.cyberforum.ru/cpp-beginners/thread352010.html
остаток от деления C++
Начало прогр на табуляцию функции. Не могу найти остаток от деления в сточке if ((x1-x2)%d==0) на d оно почему-то не делит #include <iostream.h> #include <math.h> #include <conio.h> int main() {
C++ Копирование
Господа как в с++ можно осуществить копирование файла(system не применять).
C++ работа с памятью http://www.cyberforum.ru/cpp-beginners/thread351977.html
Доброго времени суток! У меня возникло затруднение - нужно реализовать на языке Си программу,демонстрирующую распределение памяти таким способом: структура данных - односвязный упорядоченный список стратегия размещения - "следующий подходящий".если немного об этой стратегии - это стратегия выделения памяти, когда при выделении блока памяти запоминается место в списке "дыр"(свободная часть...
C++ Программа имитации входа в систему Доброго времени суток, есть одна прога которая должна запрашивать пароль и должна выводить приглашение, только в случае совпадения пароля с тем который заранее введен в самой проге, в случае ошибки, должна выводить сообщение об ошибке и просьбу повторить ввод, после трьох ошибок прога должна выводить сообщение про несанкционированный доступ и завершить работу. #include <iostream.h> #include... подробнее

Показать сообщение отдельно
Spellz
1 / 1 / 0
Регистрация: 29.01.2010
Сообщений: 25

Перезапись части информации в файле - C++

15.09.2011, 23:27. Просмотров 1376. Ответов 11
Метки (Все метки)

Доброго времени суток.

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

Итак попорядку, вот тут я записываю инфу в файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                ofstream fout("DATA.uid",ios::binary|ios::in|ios::out); //файл
                if (!fout)
                {
                    MessageBox(hDlg, "Ошибка при открытии файла.", "Ошибка", MB_OK | MB_ICONERROR);
                    return false;
                }
                if (applicationManager::app->checkPassword(password, confirm)) //пароли совпали и прошли проверку на прочность
                {
                    user.setLogin(login);
                    user.setPassword(password);
                    // позиционируемся в конец файла
                    fout.seekp(0,ios::end);
                    fout.write((char*)&user,sizeof users);  //записались в конец и закрылись
                    fout.seekp(0,ios::beg);
                    fout.close();
                    EndDialog(hDlg,0);
                    return true;
                }
Тут пытаюсь перезаписать блок:

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
                ifstream fin("DATA.uid",ios::binary); //файл
                if (!fin)
                {
                    MessageBox(hDlg, "Ошибка при открытии файла.", "Ошибка", MB_OK | MB_ICONERROR);
                    return false;
                }
                users rhs;
                unsigned short i=0;//это нам понадобиться что бы потом найти старую запись и удалить ее
                while(!fin.eof())
                {
                     fin.read((char*)&rhs,sizeof users);
                     i++;
                     if (applicationManager::app->currentUser==rhs)
                     {
                         fin.seekg(0,ios::beg);
                         fin.close();
                         ofstream fout("DATA.uid",ios::binary);
                         // нашли старого пользователя, тоесть он существует
                         // добавим пользователя заново с новым паролем
                         applicationManager::app->currentUser.setPassword(newpass);
                         fout.seekp((i-1)*sizeof users,ios::beg);
                         fout.write((char*)&applicationManager::app->currentUser, sizeof users);
                         fout.seekp(0,ios::beg);
                         fout.close();
                         EndDialog(hDlg,0);
                         return true;
                     }
                }
для ясности - users - класс, члены которого я пытаюсь записывать в файлик, applicationManager - общий класс всего приложения, остальное вроде понятно из названий.

В итоге получается что в DATA.uid остается только одна запись - последняя с измененным паролем, на том месте где была предыдущая, все до нее и после - удалилось.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru