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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка оператора ( ) для объектов класса http://www.cyberforum.ru/cpp-beginners/thread1077719.html
Здравствуйте! перегрузили оператор (). Каким образом компилятор поймет где мы вызываем оператор (), а где , например, конструктор? каким образом вообще перегружается оператор()?
C++ Функция для подсчета суммы и количества элементов больше K Добрый вечер! Есть задачка одна - звучит так: С помощью генератора случайных чисел сформировать квадратную матрицу вещественных чисел размерности m x m, где значение m <=7 вводится с клавиатуры.... http://www.cyberforum.ru/cpp-beginners/thread1077706.html
Преобразование типа из пользовательского в стандартный и из стандартного в пользовательский C++
Уважаемые форумчане, нужна ваша помощь в этом вопросе про преобразовния типов. Где об этом почитать? Если у еого семплы есть, поделитесь) Помогите пожалуйста! Добавлено через 13 часов 37 минут...
C++ Секундомер для подсчёта времени
У меня было задание такое секундомер для подсчёта времени работы разных видов сортировок (чтоб их можно было запихнуть в функцию)
C++ Динамический массив http://www.cyberforum.ru/cpp-beginners/thread1077689.html
Добрый день. Строил таблицу истинности с использованием динамического массива, вроде все верно считает, но вылетает ошибка. #include "stdafx.h" #include <iostream> using namespace std; void...
C++ Поменять начало и конец дан массив из m+n элементов. начало массива это a..a, конец массива это a..a. написать функцию, котороая меняет начало и конец местами подробнее

Показать сообщение отдельно
capricorn37
0 / 0 / 0
Регистрация: 12.01.2013
Сообщений: 9

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

22.01.2014, 05:04. Просмотров 421. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru