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

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

Восстановить пароль Регистрация
 
capricorn37
0 / 0 / 0
Регистрация: 12.01.2013
Сообщений: 9
22.01.2014, 05:04     Как добавить строку по номеру в бинарном файле #1
программа представляет собой текстовый редактор, класс - бинарный файл (производный от 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 минут
не актуально, тему можно закрывать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2014, 05:04     Как добавить строку по номеру в бинарном файле
Посмотрите здесь:

Visual C++ БД Добавить запись в access(за небольшое вознаграждение)

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

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

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