Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с потоками

501
23 ноября 2004 года
hell_admin
110 / / 02.10.2004
Привет всем, кто нибудь писал проги которые хранят в файлах данные различного типа как элементарных типов так и сложных?
У меня такая проблемма надо записывать в файл различные данные, так что бы можно было загрузить[:bigsmile:]... только проблема в том что помимо всяких структур в файле должны хранится TJPEGImage, которые просто в файл несколько штук не запишешь, но у них есть метод SaveToStream(), потому я сначало пишу свои данные в поток, а потом поодному сохраняю TJPEGImage, вроде все нормально при загрузке мои данные загружает, а вот из картинок только первую грузит отсалные когда пытаюсь Canvas->Draw(0,0,image) отрисовать мне выдает ошибку EJPEG ошибка #41... уже все перепробывал не хочет грузить и кроме первой и все... я делаю это так:
// создаем поток
TFileStream * fs = new TFileStream(OpenProject->FileName, fmOpenRead);
// .... здесь гружу свои данные


// загружаем кол-во рисунков
fs->Read(&ImageCount,sizeof(ImageCount));

// если массив указателей не пустой то опусташаем
delete [] images;
// создаем новый массив
images = new TJPEGImage*[ImageCount];

// загружаем картинки по одной
for (k=0; k < ImageCount; k++)
{
images[k]= new TJPEGImage;
images[k]->LoadFromStream(fs);
}
delete fs; // закрываем поток
}
Может надо записывать размеры картинок перед ними и грузить кол-во байт, если да то как это сделать с LoadFromStream он не берет размер байт видимо сам определяет...
Если кто делал подскажите впожалуйста чем глюк уже 2е суток мужусь...[:((]
501
26 ноября 2004 года
hell_admin
110 / / 02.10.2004
Большое всем спасибо, я уже сам разобрался.
если вдруг кому понадобится:
сохранение:
// Writing Count of Images
fs->Write(&ImageCount,sizeof(ImageCount));
for (ULONG i=0; i < ImageCount; i++)
{
// Saving to memory
images->SaveToStream(ms);
// Getting size of images
size = ms->Size;
// writeing to file size of images
fs->Write(&size,sizeof(size));
// writeing memory to file
ms->SaveToStream(fs);
// clearing memory
ms->Clear();
}
Загрузка:
// Loading count of Images
fs->Read(&ImageCount,sizeof(ImageCount));
// Creating new array
images = new TJPEGImage*[ImageCount];
// Loading images
int size=0;
for (i=0;i < ImageCount;i++)
{
fs->Read(&size,sizeof(size)); //

ms->SetSize(size); // setting stream size

fs->ReadBuffer(ms->Memory,size);

images= new TJPEGImage();
images->LoadFromStream(ms); // load

ms->Clear(); // clear memry
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог