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

Другой способ удаления объекта из бинарника - C++

Восстановить пароль Регистрация
 
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
11.10.2013, 19:32     Другой способ удаления объекта из бинарника #1
Здравия желаю!
Этот участок кода удаляет искомую структуру из файла, накладывая на неё хвост. В конце хвоста остается дублированная структура, которая удаляется уменьшением размера файла. Это не очень красиво и (при больших размерах файла) может тратить кучу времени. Есть ли способ сделать то же самое, но дешево и сердито?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
fstream bin(fName,ios::in|ios::out|ios::binary);
if(bin)
{
    bool flag=false; fltdat ob;
    while(bin.read((char*)&ob,sizeof(fltdat)))
        if(ob.num==num){flag =true; break;}
    if(flag)
    {
        while(bin.read((char*)&ob,sizeof(fltdat)))
        {
            bin.seekp(-sizeof(fltdat)*2, ios::cur);
            bin.write((char*)&ob,sizeof(fltdat));
            bin.seekp(sizeof(fltdat),ios::cur);
        }
        bin.close();
        int ffd=_open(fName, O_RDWR|O_BINARY);
        _chsize(ffd, _filelength(ffd)-sizeof(fltdat));
        _close(ffd);
    }
}
cout<<"Данные стерты."<<endl;
...
Добавлено через 22 минуты
А, нашел вариант с remove()+rename(). Вроде он в разы лучше.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2013, 19:32     Другой способ удаления объекта из бинарника
Посмотрите здесь:

C++ Чтение бинарника по биту
C++ Считывание из бинарника
Как правильно вызывать функцию объекта из другой функции того же объекта? C++
C++ С++ упаковка и распаковка файлов Zlib или любой другой способ
Чтение бинарника fortran в C++ C++
C++ Восстановление списка из бинарника
C++ Методы добавления, удаления объекта
C++ Как освободить память после удаления объекта из вектора

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 05:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru