Форум: "Начинающим";
Текущий архив: 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.047 c