Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2011, 04:54   #1
Kovy
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 11
По умолчанию Загрузка/Сохранение в текстовый и бинарный файлы.

Помоги исправить. Не работают функции(

Есть класс. В нем методы записи и загрузки для файлов.
Код:
class Array
{      
		char string[80];
        int max_length;  //макс.размер массива
        int curr;  //сколько элементов в данный момент нах-ся в массиве
        int *a;  //указатель на массив
        char* file_name();      //запрос имени файла у пользователя
public:
        Array();        //конструктор по умолчанию
        Array(int _max_length, int length, int *_a);  //конструктор с параметрами
        Array(const Array &obj);        //конструктор копирования
        ~Array();       //деструктор
        int getcurr(){return curr;}
        int getmax_length(){return max_length;}
        void add(int el, int _pos);     //добавление элемента
        void search(int el);    //поиск элемента
        void replace(int el, int _pos);         //замена элемента
        void delete_array(int _pos);            //удаление элемента
        
        
        friend ostream& operator<< (ostream& out, Array& my_array){ for (int i=0; i<my_array.curr; i++) out << " " << my_array.a[i]; return out;} 
        friend istream& operator >> (istream& in, Array& my_array);
		
 
        Array operator +(const Array &my_array);        //сложение массивов
        Array &operator=(const Array &my_array);        //присвоение
        Array operator -(const Array &my_array);        //вычитание
        
        Array operator ++(int); //увеличить на 1 (постфиксный)
        Array operator --(int); //уменьшить на 1 (постфиксный)
        Array &operator --();   //уменьшить на 1 (префиксный)
        Array &operator ++();   //увеличить на 1 (префиксный)
        
        friend ofstream &operator<<(ofstream &os, Array &my_array);
        friend ifstream &operator>>(ifstream &is, Array &my_array);
        
		int max_lengthq () {return max_length;}
		int currq() {return curr;}
		int aq() {return *a;}
        void save_txt();                                //сохранение одного
        int load_txt();                         //загрузка одного
        void save_bin(int amount);              //сохранение массива
        Array* load_bin(int &amount,int &size);//загрузка массива
};
Вот сами функции записи/чтения.
Код:
ofstream &operator<<(ofstream &os, Array &my_array)  //вывод в файл
{       
        os << my_array.curr << " " << my_array.max_length << endl;
        for (int i=0; i<my_array.curr;i++) os << my_array.a[i] << " ";  
    return os;
}
 
ifstream &operator>>(ifstream &is, Array &my_array) //загрузка из файла
{       
        is >> my_array.curr >> my_array.max_length;
        int *a =new int [my_array.max_length];
        for (int i=0; i<my_array.curr;i++) is >> my_array.a[i];
    return is;
}
 
char* Array::file_name()  //запрос имени файла
{       
   
        cout << "\nВведите имя файла: ";
        cin >> string;
        return &string[0];
}
 
int Array::load_txt()  //загружает объект из текстового файла
{       
        ifstream file(file_name());
        if(!file){cout << "Ошибка!\n"; getch(); return 0;}
        file >> *this;
        file.close();
        return 1;
}
 
void Array::save_txt()  //сохраняет объект в текстовый файл 
{       
        ofstream file(file_name());
        if(!file){cout << "Ошибка!\n"; getch(); return;} 
        file << *this;
        file.close();
}
 
void Array::save_bin(int amount)
{
        ofstream file(file_name(),ios::binary);
        if(!file){cout << "Ошибка!\n"; getch(); return;}
        file.write((char*)&amount,sizeof(int));
        for(int i=0;i<amount && !file.eof();i++)
        {
                file.write((char*)&((this+i)->curr),sizeof(int));
                file.write((char*)&((this+i)->max_length),sizeof(int));
                for (int j=0; j<curr; j++)      file.write((char*)&((this+i)->a[j]), sizeof(int));
        }
        file.close();
}
 
Array* Array::load_bin(int &amount,int &size)
{
        ifstream file(file_name(),ios::binary);
        if(!file){cout << "Ошибка!\n"; getch(); return NULL;}
        file.read((char*)&amount,sizeof(int));
        //size=amount*2;
        Array *some_array=new Array[size];
        for(int i=0;i<amount && !file.eof();i++)
        {
                file.read((char*)&((some_array+i)->curr),sizeof(int));
                file.read((char*)&((some_array+i)->max_length),sizeof(int));
                (some_array+i)->a = new int [(some_array+i)->max_length];
                for (int j=0; j<curr;j++) 
                        file.read ((char*)&((some_array+j)->a[j]), sizeof(int));
        }
        file.close();
        //cout << some_array;
        return some_array;
}
Kovy вне форума Ответить с цитированием
Старый 17.02.2011, 04:54   #2
Kovy
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 11
По умолчанию

Вот так я вызываю функции в мейне:
Код:
int length, max_length=10, length1;
        cout << "Вариант 7. Работа с массивом\n" <<endl;
        int size = 5; int amount = 3;
        Array *some_array=new Array[size];              //создание массива объектов
 
        cout << "Введите размерность массива (не более 10-ти): "; cin >>length;
        int *temp = new int [length];
        Array my_array1(max_length, length, temp);      //создание объекта 1
        cin >> my_array1;
        
        cout << "Введите размерность массива (не более 10-ти): "; cin >>length1;
        int *temp1 = new int [length1];
        Array my_array2(max_length, length1, temp);     //создание объекта 2
        cin >> my_array2;

my_array1.save_txt(); my_array2.save_txt();
my_array1.load_txt(); my_array2.load_txt();
some_array->save_bin(amount);
some_array=some_array->load_bin(amount,size); cout << some_array;
Проблема в следующем: В бинарный файл он вроде как вообще ничего толкового не записывает.
А в текстовый записывает только данные по 2му объекту. Я так понимаю он записывает по первому, а потом поверх по второму и второй затирает первый.
Kovy вне форума Ответить с цитированием
Старый 17.02.2011, 12:04   #3
Kovy
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 11
По умолчанию

Работу с текстовым файлом наладил. С бинарным не работает(
Kovy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение списка документов в текстовый файл twist Помощь студентам 3 14.05.2010 00:09
Сохранение в текстовый файл Lisёноk Помощь студентам 4 01.05.2010 23:16
Delphi. Сохранение в текстовый документ. Волчица Помощь студентам 5 29.04.2010 01:44
Сохранение ValueListEditor в файл (текстовый) Vol666 Общие вопросы Delphi 21 12.09.2009 11:50
Сохранение в текстовый файл Askat Общие вопросы Delphi 11 26.02.2008 14:47