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

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

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

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

11.10.2013, 19:32. Просмотров 189. Ответов 0
Метки нет (Все метки)

Здравия желаю!
Этот участок кода удаляет искомую структуру из файла, накладывая на неё хвост. В конце хвоста остается дублированная структура, которая удаляется уменьшением размера файла. Это не очень красиво и (при больших размерах файла) может тратить кучу времени. Есть ли способ сделать то же самое, но дешево и сердито?

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++
Делал по примеру, ошибки разгребаю по мере появления. Помогите, пожалуйста, реализовать методы добавления addBus() и удаления delBus()...

Как освободить память после удаления объекта из вектора - C++
Всем доброго времени суток. Никак не могу понять как освободить память, после удаления объекта из вектора... std::vector&lt;TNetwork*&gt;...

С++ упаковка и распаковка файлов Zlib или любой другой способ - C++
Здравствуйте, возникла такая проблема, немогу упаковать файл и распаковать, пытаюсь использовать Zlib, http://www.zlib.net/manual.html...

Считывание из бинарника - C++
FILE* fl=fopen((ExtractFilePath(ParamStr(0))+r_buf+&quot;.bin&quot;).c_str(), &quot;w&quot;); char* l=r_buf.c_str(); WORD l1=strlen(l); ...

Восстановление списка из бинарника - C++
Есть 2 функции bool SaveToFile(char* FileName, void** ArrRestourant) {TFile f; if ((f = fopen(FileName, &quot;wb&quot;)) == NULL){return...

Чтение бинарника по биту - C++
Всем привет! Уважаемые, помогите пожалуйста! Есть бинарный файл. Из него надо получить число, закодированное, например, в старших трех...

Компиляция бинарника на gcc - C++
Задача: нужно скомпилировать сырой бинарник на gcc. Он будет грузиться по адресу 0x10000 и туда же будет передаваться управление. И мне...

Чтение бинарника fortran в C++ - C++
Добрый день, кодер я начинающий поэтому даже приблизительно не знаю как реализовать следующую функцию. В общем есть бинарник fortran,...

Запись/чтение нуля из бинарника - C++
Здравствуйте! Такая проблема обозначилась: есть некоторая переменная типа unsigned int tt, которая на каждом шаге цикла должна...

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


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

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

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