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

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

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

Как добавить строку по номеру в бинарном файле - C++

22.01.2014, 05:04. Просмотров 427. Ответов 0
Метки нет (Все метки)

программа представляет собой текстовый редактор, класс - бинарный файл (производный от fstream)
структура : двусвязный циклический список
нужно реализовать функцию вставки по номеру, но то, что у меня получается, не работает
помогите пожалуйста, где подправить нужно? не могу найти в чем баг(

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
29
30
31
32
33
34
35
36
37
38
39
40
void  bin_file::add_elem_nom(char *str, int nomer){
    if ( nomer>count() ) 
         add_elem(str); //Добавление элемента в конец списка
    else 
    {
        length=strlen(str); //считываем длину строки в байтах
    //  next=0;
    //  prev=0;
        seekp(0,ios::beg); // в начало файла
        if (nomer==0) //Вставка перед первым элементом
        {
            int _prev=prev; //Позиция "старого" первого элемента
            int _next=next; //Позиция "старого" первого элемента
            seekp(0, ios::end); //Перемещение в конец файла
            prev=tellp(); // Позиция "нового" первого элемента
            write((char *)&_next,4);
            write((char *)&_prev,4);
            write((char *)&length,4);
            write(str,length);
        }
        else //Вставка после первого элемента
        {
            
            for(unsigned i = 0; i < nomer; i++) //Проходим в цикле до нужного элемента
            {
                    int _prev=prev; //Запоминаем позицию предыдущего
                    //prev=tellp(); // запоминаем позицию предыдущего
                    seekp(next,ios::beg); //Перемещение позиции потока на следующий эл-т
                    read((char *)&next,4); //Чтение указателя на следующий элемент
                    seekp(0, ios::end);         //Перемещение в конец файла
                    unsigned new_elem = tellp();    //Позиция нового элемента
                    write((char *)&next,4);
                    write((char *)&prev,4);
                    write((char *)&length,4);
                    write(str,length);
                    seekp(_prev, ios::beg);                     //Перемещение на предыдущий
                    write((char*)&new_elem, sizeof(new_elem));  //Запись указателя на вставленный элемент
            }
        }
    }
сначала проверяю номер, по которому нужно вставить. если он больше элементов в файле, то просто вызывается функция добавления в конец (которая работает). потом еще условие: если номер 0, то вставить нужно перед 1м, либо после.

структура такая:
C++
1
2
3
4
5
6
7
8
9
class bin_file : public std::fstream{
 
    private:
 
        int length; //длина строки
 
        int next; //файловый указатель на след
    
        int prev; //файловый указатель на  пред
Добавлено через 8 часов 29 минут
не актуально, тему можно закрывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2014, 05:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как добавить строку по номеру в бинарном файле (C++):

Найти UTF-16 строку в бинарном файле - C++
Здравствуйте, Есть вот такая процедура для поиска и замены строк в бинарном файле. Применяю ее на обычном PE-файле. Проблема в том,...

Как изменять 1 байт в бинарном файле? - C++
Здравствуйте! Требуется помощь. Необходимо создать неcколько исполняемых файлов под windows, позволяющих изменять 1 байт в файле...

Как заменить цифру в бинарном файле? - C++
В программе нужно заменить цифру в бинарном файле. Возникла проблема с функцией замены swap_val. Считывает не цифру, а невесть что, к тому...

Как изменить один байт в бинарном файле? - C++
Здравствуйте. Второй день бьюсь над вопросом, просмотрел много примеров, но не понимаю, помогите. Мне нужно изменить один байт в...

Как в бинарном файле (.dat) удалять и редактировать выбранную запись - C++
Подскажите как в бинарном файле(.dat) удалять и редактировать выбранную запись(case 5 и case 6): #include &quot;stdafx.h&quot; #include...

Как задать переменную в бинарном формате? (В шестнадцатиричном через Х, а бинарном?) - C++
То есть какой синтаксис ваще? для 16-иричной НОЛЬ икс ЧИСЛО, к примеру, могу задать float, добавив в конце f, а как задать бинарное...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 05:04
Привет! Вот еще темы с ответами:

БД в бинарном файле - C++
Доброго времени суток! Нужно создать БД, которая хранит несколько таблиц. БД с ее данными должна храниться в бинарном файле на диске....

Структура в бинарном файле - C++
У меня проблема с бинарными файлами. Помогите, пожалуйста, правильно оформить ввод структуры в бин.файл и вывод на экран. #include...

Поиск в бинарном файле - C++
в бинарном файле записаны цены вводится цена программа должна выдать все услуги равные цене не пойму почему он выдаёт cout &lt;&lt; &quot;Error!...

Структура в бинарном файле - C++
Разработать программу на С++, позволяющую: 1) Добавлять данные структуры с указанными полями в файл. 2) Просматривать структуры из...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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