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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lahden
1 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 52
#1

Удаление записи из бинарного файла - C++

20.03.2014, 19:14. Просмотров 494. Ответов 6
Метки нет (Все метки)

Задача - удалить запись из бинарного запись по имени
find находит запись, которую нужно удалить
cur - текущая позиция
del - удаляемая запись
осталось переписать записи, но вылетает ошибка (насколько понимаю, проблемы с памятью)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    m_r = find (name);
    if(!m_r)
        return false;
    long cur (_tell (m_f));
    long del (cur - m_r -> getLen());
    long offset = LS;
    char* s = new char[1];
    short len;
    while (_read (m_f, &len, LS))
    {
        delete s;
        s = new char [len];
        _lseek (m_f, -offset, SEEK_CUR);
        _read (m_f, s, len);
        cur = _tell (m_f);
        _lseek (m_f, -(cur-del), SEEK_CUR);
        _write (m_f, s, len);
        del = _tell (m_f);
        _lseek (m_f, (cur-del), SEEK_CUR);
    }
    m_n--;
    _chsize(m_f, SEEK_CUR);
    return true;
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2014, 19:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление записи из бинарного файла (C++):

Удаление записи из бинарного файла - C++
Добрый вечер! У меня проблема не могу удалить из структуры. Добавление и считывание из бинарного файла я сделал. Удаление не...

Удаление бинарного файла - C++
Доброго времени суток! Не могу удалить файл "prile.dat". Смысл функции "find_and_change" в том, чтобы скопировать часть содержимого из...

Удаление записей из бинарного файла - C++
Столкнулась со следующей проблемой. В задании необходимо записать и считывать данные о структуре из бинарного файла и удалить все записи,...

Редактирование записи бинарного файла - C++
Здравствуйте. Подскажите пожалуйста, мне надо призвести редактирование записи в файле, данные в файл заношу через структуру: struct TZap{...

Сортировка\редактирование\удаление бинарного файла - C++
Люди помогите пожалуйста... В бинарном файле у меня находятся сведения о нуждающихся в пособии. Имеются функции создания\откртия файла,...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 20:04 #2
Цитата Сообщение от Lahden Посмотреть сообщение
но вылетает ошибка (насколько понимаю, проблемы с памятью)
Уверены, что в выложенном коде?
Lahden
1 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 52
20.03.2014, 23:10  [ТС] #3
нет, не уверен, она еще в просмотре состояния может быть, хотя до удаления там все работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CRecord* CMyFile :: view (long position) const
{
    if(position == 0L)
        _lseek (m_f, 0L, SEEK_SET);
    long offset = LS;
    char* s = new char[1];
    short len;
    _read (m_f, &len, LS);
    delete s;
    s = new char [len];
    _lseek (m_f, -offset, SEEK_CUR);
    _read (m_f, s, len);
    m_r -> makeObj (s);
    return m_r;
}
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 23:27 #4
Зачем здесь, вообще, нужно динамическое выделение памяти? Утечки.
Lahden
1 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 52
20.03.2014, 23:30  [ТС] #5
метод возвращает 1 запись и я использую его в цикле
C++
1
2
3
4
5
6
7
8
9
10
11
void CMenu :: view () const
{
    int n(m_ctrl -> getN());
    cout << *(m_ctrl -> view (0)) << endl;
    int i(1);
    while (i<n)
    {
        cout << *(m_ctrl -> view (-1)) << endl;;
        i++;
    }
}
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.03.2014, 00:09 #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Lahden Посмотреть сообщение
метод возвращает 1 запись и я использую его в цикле
И что? Если использовать выделение памяти на сткеке, то возвращать не будет?

Добавлено через 1 минуту
Цитата Сообщение от Lahden Посмотреть сообщение
C++
1
2
3
4
5
6
7
...
s = new char [len];
_lseek (m_f, -offset, SEEK_CUR);
_read (m_f, s, len);
m_r -> makeObj (s);
return m_r;
...
Здесь выделили память, где она освобождается?

Добавлено через 30 минут
Цитата Сообщение от Lahden Посмотреть сообщение
нет, не уверен, она еще в просмотре состояния может быть
Отладчиком умеете пользоваться?
Lahden
1 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 52
24.03.2014, 23:28  [ТС] #7
alsav22, спасибо за наводки, ошибка оказалась в _chsize_s, исправил и теперь все работает отлично)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2014, 23:28
Привет! Вот еще темы с ответами:

Ошибка при чтении/записи из бинарного файла - C++
Сделал простую программу для работы с бинарными файлами, но когда запускаю ее вылетает ошибка. Сделать проще уже некуда, в чем проблема? ...

При записи в начало бинарного файла удаляется все его содержимое - C++
Есть бинарный файл, в котором в самом начале 2 байта отделены для значения int, а далее идут структуры. Нужно сменить это значение int в...

Удаление файла записи - C++
Подскажите пожалуйста функцию удаления файла .txt

Удаление записи из файла - C++
Вот код который добавляет 10 записей в файл..(не компилил, но работать он должен) #include &lt;iostream&gt; #include &lt;fstream&gt; using...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.03.2014, 23:28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru