Работа с потоками
У меня такая проблемма надо записывать в файл различные данные, так что бы можно было загрузить[: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е суток мужусь...[:((]
если вдруг кому понадобится:
сохранение:
// 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
}