Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
1-1130676546
Draught
2005-10-30 15:49
2005.11.20
Замена Memo на что либо более подходящее


14-1130401937
nk
2005-10-27 12:32
2005.11.20
Мини АТС Рanasonic KX-TD1232


6-1123611899
Yegorchic
2005-08-09 22:24
2005.11.20
А TIdIPWatch.IsOnline true не только при соединении с интернетом?


5-1111751604
Gennadiy
2005-03-25 14:53
2005.11.20
Проблема с созданием компонента!


14-1129293756
Red_imp
2005-10-14 16:42
2005.11.20
ЧГК





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский