Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Хранение информации разных типов в одном файле   Найти похожие ветки 

 
ArchValentin ©   (2005-11-01 00:26) [0]

Здарова люди. Тут недавно сталкнулся с одной очень интересной проблемкой, а она настолько интересна, что даже не знаю что теперь делать :) Вороче пишу прогу типа анкеты, юзеры заполняют кучу полей, которые довольно просто сохранить и потом достать из текстового файла или какой-нить базы данных, е ежели я хочу чтобы юзер туда ещё вложил свою фотку, примитив сразу становиться проблемой :(
Можно конечно сделать это в разных файлах, но это неинтересно и некрасиво. Может кто сталкивался с такой темой. Помогите плз...


 
Юрий Зотов ©   (2005-11-01 00:52) [1]

1. Пишем длину элемента данных N (4 байта)
2. Пишем сам элемент данных (N байт)

И так, пока не кончатся все данные. Читаем в том же порядке.


 
saNat ©   (2005-11-01 00:52) [2]

Используйте Access, например. Все просто и быстро.

С уважением, ЕВА.


 
Defunct ©   (2005-11-01 01:52) [3]

ArchValentin ©   (01.11.05 00:26)  

см. про тип поля - BLOB


 
ArchValentin ©   (2005-11-01 02:39) [4]

...еже ли не сложно, кинте сорец с конкретным примером. А то так довольно сложно разбираться. Заранее спасибо


 
Джо ©   (2005-11-01 02:41) [5]

[4] ArchValentin ©   (01.11.05 02:39)
> А то так довольно сложно разбираться.

Программировать вообще не просто.


 
Джо ©   (2005-11-01 02:42) [6]


> [4] ArchValentin ©   (01.11.05 02:39)
> ...еже ли не сложно, кинте сорец с конкретным примером.
>

А, кстати, с примером - чего? Их тут несколько подсказали.


 
ArchValentin ©   (2005-11-01 02:45) [7]


> Джо ©   (01.11.05 02:41) [5]

тоже конечно верно, но всё-таки. Для это го то и создали такие конференции


 
Джо ©   (2005-11-01 02:46) [8]

[7] ArchValentin ©   (01.11.05 02:45)
> Для это го то и создали такие конференции

Рискну предположить, что, все-таки, не для этого, ну да ладно :)

Так пример по какой подсказке требуется?


 
ArchValentin ©   (2005-11-01 02:53) [9]


> Джо ©   (01.11.05 02:46) [8]

Конкретно, как запихать в один файл куртинку и пару строк...


 
злобная танька   (2005-11-01 03:10) [10]

разложы ее на пикселы и пихай.. ширину, высоту, потом ширину*высоту пикселов (по три байта кажный например) потом строчки свои.. проще пареной репы. через файлстрим удобно.


 
Джо ©   (2005-11-01 03:18) [11]


procedure ReadString (AStream: TStream; var AString: string);
var
 Sz: Integer;
begin
 // читаем размер данных
 AStream.Read(Sz,SizeOf(Sz));
 // устанавливаем длину строки
 SetLength(AString,Sz);
 // читаем строку
 AStream.Read(AString[1],Sz);
end;

procedure WriteString (AStream: TStream; AString: string);
var
 Sz: Integer;
begin
 // пишем длину данных
 Sz := Length(AString);
 AStream.Write(Sz,SizeOf(Sz));
 // пишем сами данные
 AStream.Write(AString[1],Sz);
end;

// запись
procedure TForm12.Button1Click(Sender: TObject);
var
 FS: TFileStream;
begin
 FS := TFileStream.Create("d:\storage.dat",fmCreate);
 try
   Image1.Picture.Bitmap.SaveToStream(FS);
   WriteString (FS,Edit1.Text);
 finally
   FS.Free;
 end;
end;

//чтение
procedure TForm12.Button2Click(Sender: TObject);
var
 FS: TFileStream;
 S: string;
begin
 FS := TFileStream.Create("d:\storage.dat",fmOpenRead);
 try
   Image1.Picture.Bitmap.LoadFromStream(FS);
   ReadString (FS,S);
   Edit1.Text := S;
 finally
   FS.Free;
 end;
end;



 
Джо ©   (2005-11-01 03:37) [12]

Или воспользоваться streaming capabilities of TComponent.

unit Unit1;

interface
uses Classes, SysUtils, Graphics;

type

 TStorage = class (TComponent)
 private
   FMyString: string;
   FBitmap: TBitmap;
   procedure SetBitmap(const Value: TBitmap);
 published
   property MyString: string read FMyString write FMyString;
   property MyBitmap: TBitmap read FBitmap write SetBitmap;
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 end;

implementation

{ TStorage }

constructor TStorage.Create(AOwner: TComponent);
begin
 inherited;
 FBitmap := TBitmap.Create;
end;

destructor TStorage.Destroy;
begin
 FBitmap.Free;  
 inherited;
end;

procedure TStorage.SetBitmap(const Value: TBitmap);
begin
 FBitmap.Assign(Value);
end;

end.


Пример:


// запись
procedure TForm12.Button1Click(Sender: TObject);
var
 FS: TFileStream;
 Storage: TStorage;
begin
 FS := TFileStream.Create("d:\storage.dat",fmCreate);
 try
   Storage := TStorage.Create(nil);
   try
     Storage.MyString := Edit1.Text;
     Storage.MyBitmap := Image1.Picture.Bitmap;
     FS.WriteComponent(Storage);
   finally
     Storage.Free;
   end;
 finally
   FS.Free;
 end;
end;

//чтение
procedure TForm12.Button2Click(Sender: TObject);
var
 FS: TFileStream;
 Storage: TStorage;
begin
 FS := TFileStream.Create("d:\storage.dat",fmOpenRead);
 try
   Storage := TStorage.Create(nil);
   try
     FS.ReadComponent(Storage);

     Image1.Picture.Bitmap := Storage.MyBitmap;
     Edit1.Text := Storage.MyString;
   finally
     Storage.Free;
   end;
 finally
   FS.Free;
 end;
end;


В общем, вариантов масса. И это еще не касались СУБД.


 
Amoeba ©   (2005-11-01 10:40) [13]

Библиотека Single File System. Для некоммерческого использования бесплатна.
http://www.aidaim.com/single_file_system.htm

Сам успешно ее использую.



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.063 c
6-1123706619
Trojan_nt
2005-08-11 00:43
2005.11.20
Помогите создать статистику DSN Инета


2-1130516275
DelphiLexx
2005-10-28 20:17
2005.11.20
Подскажите где ошибка


2-1130837000
Dush
2005-11-01 12:23
2005.11.20
рисование на StringGrid


14-1130579720
Mambo
2005-10-29 13:55
2005.11.20
View Source in MS IE


9-1120589253
Dgt
2005-07-05 22:47
2005.11.20
Просчет теней в Glscene uses vertex lighting