Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение массива 
V
    Опции темы
GLeBaTi
Дата 19.1.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 1.2.2008
Где: г.Чебоксары

Репутация: -1
Всего: 0



Создал класс:
Код

class TToolType
{
     public:
     TToolType();
     TToolType(char* name, std::vector<int> x_coords,std::vector<int> y_coords );
    ~TToolType(){}
        char*  Name;
        std::vector<int> X_coords;
        std::vector<int> Y_coords;
};

затем хотел записать/прочитать объекты в/из бинарный файл:
Код

bool uncoded=false;
        #define Uncoded ((TObject*)&uncoded)
        using namespace std;
        TToolType* toolType[1];
        toolType[0] = new TToolType();
        toolType[0]->Name = "point";
        toolType[0]->X_coords.push_back(10);
        toolType[0]->Y_coords.push_back(20);

        //запись этого объекта
        ofstream FILE;
        FILE.open("ToolTypes",ios::binary|ios::app);
        FILE.write((char *)&toolType[0],sizeof(toolType[0]));
        FILE.close();

         //Загрузка всех элементов из файла
        ifstream FILE1;
        FILE1.open("ToolTypes",ios::binary);
        TToolType* toolTypes[1];
        int i=0;
        while(!FILE1.eof() && FILE1.read((char*)&toolTypes[i],sizeof(toolTypes[i])).good())
        {
                Application->MessageBox(toolTypes[i]->Name, "Look", MB_OK);
                Form1->ListView1->AddItem(toolTypes[i]->Name,Uncoded);
                i++;
        }
        FILE1.close();

не сработало, на форумах сказали, что vector нельзя сохранять в файл, т.к. там что-то с памятью
После этого решил записать через структуру:
Код

struct TToolType
{
char Name[20];
int X_coords[100];
int Y_coords[100];
};

Код

const int n = 2;
        TToolType toolTypes[n]={
          "tool1",{0,0,0,0,0,0},{1,1,1,1,1,1},
          "tool2",{0,0,0,0,0,0},{2,2,2,2,2,2}
        };
        ofstream FILE;
        FILE.open("ToolTypes",ios::binary|ios::app);
        for (int i=0; i<n; i++)
                FILE.write((char *)&toolTypes[i],sizeof(toolTypes[i]));
        FILE.close();

        ifstream FILE1;
        FILE1.open("ToolTypes",ios::binary);
        TToolType _toolTypes[n];
        int i=0;
        while(!FILE1.eof() && FILE1.read((char *)&_toolTypes[i],sizeof(_toolTypes[i])).good() == true )
        {
                Application->MessageBox(_toolTypes[i].Name, "Look", MB_OK);
                Form1->ListView1->AddItem(_toolTypes[i].Name,Uncoded);
                i++;
        }
       FILE1.close();

один фиг что-то не дозаписывает ((
Очень прошу помочь мне, уже пол месяца вожусь с этим (((
PM MAIL   Вверх
baldina
Дата 19.1.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата

vector нельзя сохранять в файл, т.к. там что-то с памятью

там указатель на память массива, который, конечно, бессмысленно сохранять. но никто не мешает написать функцию сохранения класса, которая будет правильно сохранять vector, типа
Код

vector<T> v;
file.write (&v[0], sizeof (T) * v.size());


Цитата

один фиг что-то не дозаписывает ((

вообще-то все она дозаписывает, но лучше бы число записей хранить в файле
Код

std::ofstream FILE;
FILE.open("ToolTypes",std::ios::binary|std::ios::app);
FILE.write((char *)&n,sizeof n);
for (int i=0; i<n; ++i)
  FILE.write((char *)&toolTypes[i],sizeof(toolTypes[i]));
FILE.close();
...
std::ifstream FILE1;
FILE1.open("ToolTypes",std::ios::binary);
TToolType _toolTypes[n];
int m;
FILE1.read((char*)&m,sizeof m);
assert (m == n);
FILE1.read((char*)_toolTypes,sizeof _toolTypes);
FILE1.close();


флаг конца файла устанавливается только при попытке читать за концом файла, т.е. в твоём цикле она пытается читать 3 раза и (по умолчанию) возбуждает исключение.
PM MAIL   Вверх
GLeBaTi
Дата 19.1.2010, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 1.2.2008
Где: г.Чебоксары

Репутация: -1
Всего: 0



вот вызвалась ф-ия записи
Код

const int n = 2;
TToolType toolTypes[n]={"tool1",{0,0,0,0,0,0},{1,1,1,1,1,1},
                                        "tool2",{0,0,0,0,0,0},{2,2,2,2,2,2}};

ofstream FILE;
FILE.open("ToolTypes",ios::binary|ios::app);
FILE.write((char *)&n,sizeof n);
for (int i=0; i<n; i++) //здесь вы поставили ++i - почему ?
     FILE.write((char *)&toolTypes[i],sizeof(toolTypes[i]));
FILE.close();

а вот ф-ия чтения:
Код

ifstream FILE1;
FILE1.open("ToolTypes",ios::binary);
int m;
FILE1.read((char*)&m,sizeof m);
TToolType _toolTypes[m]; //m - число записей, но так как я написал здесь, нельзя.На что мне заменить ?
//assert (m == n);
FILE1.read((char*)_toolTypes,sizeof _toolTypes);
FILE1.close();
...

PM MAIL   Вверх
bsa
Дата 19.1.2010, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
ifstream FILE1;
FILE1.open("ToolTypes",ios::binary);
int m;
FILE1.read(static_cast<char*>(static_cast<void*>(&m)), sizeof(m));
std::vector<TToolType> _toolTypes(m); //можно так
//assert (m == n);
FILE1.read(static_cast<char*>(static_cast<void*>(&_toolTypes[0])), sizeof(_toolTypes[0]) * _toolTypes.size());
FILE1.close();
...

PM   Вверх
GLeBaTi
Дата 19.1.2010, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 1.2.2008
Где: г.Чебоксары

Репутация: -1
Всего: 0



О, клёва, спасибо вам большое!)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1026 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.