PDA

View Full Version : چگونه میتوان چند فایل مجزا را در یک فایل ذخیره کرد؟



Ali Ya Amin
جمعه 20 شهریور 1383, 06:58 صبح
من یک دلفی کار مبتدی هستم. چگونه میتوان چند فایل مجزا را از چند نوع مختلف در یک فایل با یک پسوند ذخیره کرد و دوباره همان فایلها را خواند. مثلا یک فایل bmp. و
یک فایل wav. را در یک فایل zzz. ذخیره کرد و بدون ایراد آنها را خواند.
متشکرم؛ البته اگر کمکم کنید! :oops:

SalarSoft
جمعه 20 شهریور 1383, 12:35 عصر
سلام علی جان بابا کجا بودی! :گیج: :heart:

خب اگر می خوای هر کدام از فایل های فوق جداگانه در یک فایل ذخیره بشن و دوباره بتونی اونا رو با فرمت ها قبلی استخراج کنی می تونی از TCollection استفاده کنی!

یعنی یه Stream توی TCollectionItem بزاری و بعدش با استفاده از Stream فایل مربوطه رو لود کنی.

من یونیت کامل این TCollection رو می زارم اینجا!

نحوه استفاده:
برای اینکه فایلها رو توش وارد کنی از کد زیر استفاده کن:

procedure TForm1.Button1Click(Sender: TObject);
var
fany:TAnyFile;
fItem1,fItem2:TAnyFileItem;
begin
fany:=TAnyFile.Create(TAnyFileItem);
try
{--start Adding bmp format--}
fItem1:=fany.Add;
fItem1.Stream.LoadFromFile('c:\myPicture.bmp');
{---End Adding bmp format---}

{--start Adding wav format--}
fItem2:=fany.Add;
fItem2.Stream.LoadFromFile('c:\MyWave.wav');
{---End Adding wav format---}

{---Save last file----}
fAny.SaveToFile('c:\MyCombinedFiles.zzz');
{---------------------}
finally
fany.Free;
end;
end;

و برای استخراج از فایل فوق می تونی از دستور زیر استفاده کنی:

procedure TForm1.Button2Click(Sender: TObject);
var
fany:TAnyFile;
fItem1,fItem2:TAnyFileItem;
begin
fany:=TAnyFile.Create(TAnyFileItem);
try
fany.LoadFromFile('c:\MyCombinedFiles.zzz');
fany.Items[0].Stream.SaveToFile('c:\myPicture.bmp' );

fany.Items[1].Stream.SaveToFile('c:\MyWave.wav');

finally
fany.Free;
end;
end;
این هم یه دیه حسابی واسه تو :gift:
امید وارم مفید بوده باشه (:D)

SalarSoft
سه شنبه 24 شهریور 1383, 10:48 صبح
سلام علی جان... :heart:
می بخشید مثل اینکه کد قبلی اشکال داشت!! چون تستش نکرده بودم!! :oops:
مشکل از اینجا بود که هنگام نوشتن کامپوننت TAnyFileItem پروپرتی Stream نوشته نمی شد. پس برای حل مشکل از DefineProperties استفاده کردم که در کلاس TComponent موجود است و اونو در کلاس TAnyFilesWrapper به کار بردم.
DefineProperties به ما اجازه می ده که هر آنچه را که خواستیم بتوانیم به عنوان پروپرتی ( یا همان دارایی) کامپوننتمان ذخیره کنیم (فرقی نمی کنه کجا, در هر فایلی یا در فایل DFM).
به هر حال...

دوباره اصلاحش کردم. و تستش کردم. درست کار می کنه.
با همون مثال بالایی می تونی کار کنی. :)

خوش باشی...(غم مخور که دنیا یک روز است)... :) :flower: