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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Передача входного потока в дочерний процесс http://www.cyberforum.ru/cpp-beginners/thread974940.html
Воспользовался вот этим кодом, добавив в код процесса-клиента (дочернего) считывание строки с помощью getchar(). В результате получилось что консоль ожидает ввода, но ввести что-либо невозможно. Поясните пожалуйста, в чем моя ошибка? Родительский процесс перенаправляет входной поток по каналу в дочерний, а из дочернего я хотел считать его getchar ' ом
C++ Напишите программу, печатающую гистограмму появления различных введенных символов во входной строке 1) Напишите программу, печатающую гистограмму появления различных введенных символов во входной строке. http://www.cyberforum.ru/cpp-beginners/thread974937.html
Найти самое большое кратное 13 положительное значение последовательности C++
1. Поступает последовательность, 0 – конец последовательности. Найти самое большое кратное 13 положительное значение последовательности. (Программирование циклических процессов на языке С++) если можно, то с пояснениями) заранее спасибо:)
C++ Программа С++
Помогите найти ошибки пожалуйста! криво работает вывод, не выводятся пункты меню покупки и продажи авто. #include <string> #include <fstream> #include <iostream> using namespace std; int menu()
C++ Чтение из командной строки http://www.cyberforum.ru/cpp-beginners/thread974897.html
всем привет!такая проблема,вот таким образом обрабатываю командную строку : sscanf_s((char*)lpCmdLine,"%i %i %i %i %i", &q, &j, &k, &l, &m);введеные данные обрабатываются так : if(q==1) { for(int i=0;i<j;i++) drawLine(800,450,(int)300*cos((P*i*360)/(180*j))+800,(int)300*sin((P*i*360)/(180*j))+450,hdc); }и получается что если вводишь "q" он видит и заходит в это условие но "j" он почему...
C++ Алгоритм краскала Здравствуйте!Не могли бы вы помочь реализовать алгоритм Краскала(поиск остового дерева с наименьшим весом)!Спасибо! подробнее

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

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(). Вроде он в разы лучше.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru