امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
FileStream در دلفی
نویسنده پیام
iman-63 آفلاین
کاربر فعال بخش الکترونیک
***

ارسال‌ها: 365
موضوع‌ها: 71
تاریخ عضویت: مرداد ۱۳۸۶

تشکرها : 62
( 332 تشکر در 148 ارسال )
ارسال: #12
RE: FileStream در دلفی
سلام.
اگه بخوام دیتاهای چند فایل رو توی یه فایل کپی کنم چیکار کنم؟
مثلاً 10 فایل دارم که میخوام محتویات اونا رو به ترتیبی که دوست دارم توی یه فایل کلی کپی کنم.
۲۹-مرداد-۱۳۸۸, ۰۹:۰۴:۴۲
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #13
RE: FileStream در دلفی
با یستی یه استانداردی ایجاد کنین و طبق اون بخونین و بنویسین مثلا 2 بایت برای طول و بعد اطلاعات به همین ریتم اطلاعات رو تو فایل مینویسین و برای خوندن هم 2بایت طول رو میخونین و بعد به همون اندازه اطلاعاتو میخونین
۲۹-مرداد-۱۳۸۸, ۱۰:۰۱:۳۶
وب سایت ارسال‌ها
پاسخ
iman-63 آفلاین
کاربر فعال بخش الکترونیک
***

ارسال‌ها: 365
موضوع‌ها: 71
تاریخ عضویت: مرداد ۱۳۸۶

تشکرها : 62
( 332 تشکر در 148 ارسال )
ارسال: #14
RE: FileStream در دلفی
منظورم از " ترتیبی که دوست دارم " ترتیب محتویات درون فایل نیست.
میخوام تمام محتویات 10 فایلو توی یه فایل جمع کنم.
۲۹-مرداد-۱۳۸۸, ۱۰:۲۱:۳۳
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #15
RE: FileStream در دلفی
بینین برای این کار شما به 2 پارامتر نیاز دارین اطلاعات فایل و طول اون فایلی رو که میخواهین اطلاعات رو توش بریزین رو باز میکنین file0 و فایلی رو که میخواهین اطلاعات از اون خونده بشه رو هم باز میکنین file1 حالا اطلاعات مورد نظر رو از فایل 1 میخونیم مثلا شد یه buffer به طول 589 بایت خب حالا این اطلاعات رو به file0 انتقال میدیم و بعد مقدار طول رو مینویسیم پس طولی که به file0 اضافه کردیم برابر 589+3 خواهد بود حالا file2 رو باز میکنیم و اطلاعاتشو تو یه بافر میریزیم مثلا طول این بافر شد 215 تا حالا اینو بهfile0 انتقال میدیم و بعد از اون طول اونو فرار میدیم که طول اون بربر 215 هست که 3 بایت میشه پس طولی که ما به file0 اضافه کردیم 215+3 هست برای فایلهای بعدی هم به همین منوال نجام میدیم توجه داشته باشین که مقدار طول فایل رو بایت ثابت در نظر بگیرین مثلا اگه تو 10 فایل یه فایل به حجم 125478 دارین طول بافرها رو به جای 3 بایت 6 بایت در نظر بگیرین البته میشه اینو به صورت دینامیک هم ایجاد کرد ولی در حالت اول راحتره


حالا برای خواندن اطلاعات file0 رو باز میکنین 3 بایت اخر رو میخونین که طول بافر رو نشون میده مثلا نوشته 215 حالا از انتهای فایل 215+3 بایت میاین عقب و 215 بایت رو میخونین بعد 3 بایت عقبتر میرین و طول اطلاعات بعدی رو میخونین که میشه 3+215+3 که مثلا نوشته 569 حالا از انتهای فایل 3+215+3+569 بایت عقب میرین و 569 بایت رو میخونین و به همین ترتیب ادامه میدین تا اخر
۲۹-مرداد-۱۳۸۸, ۱۳:۰۱:۴۶
وب سایت ارسال‌ها
پاسخ
iman-63 آفلاین
کاربر فعال بخش الکترونیک
***

ارسال‌ها: 365
موضوع‌ها: 71
تاریخ عضویت: مرداد ۱۳۸۶

تشکرها : 62
( 332 تشکر در 148 ارسال )
ارسال: #16
RE: FileStream در دلفی
من اینکارو کردم:
کد php:
begin
 NewFile 
:= TFileStream.Create('c:\Edit.txt'fmCreate);
 for 
i:=1 to 4 do
 
begin
 OldFile 
:= TFileStream.Create('c:\'+IntToStr(i)+'.txt ', fmOpenRead );
 NewFile.CopyFrom(OldFile,fmOpenRead);
 FreeAndNil(OldFile);
 end;
 FreeAndNil(NewFile);
end; 

میخوام یه opendialog بذارم و تعدادی فایل رو دونه دونه انتخاب کنم و بریزم تو آرایه ...
با چه دستوری اندیس های آرایه رو میشه جابجا کرد؟
(آخرین ویرایش در این ارسال: ۲۹-مرداد-۱۳۸۸, ۱۹:۳۴:۳۶، توسط iman-63.)
۲۹-مرداد-۱۳۸۸, ۱۴:۱۸:۳۷
ارسال‌ها
پاسخ
iman-63 آفلاین
کاربر فعال بخش الکترونیک
***

ارسال‌ها: 365
موضوع‌ها: 71
تاریخ عضویت: مرداد ۱۳۸۶

تشکرها : 62
( 332 تشکر در 148 ارسال )
ارسال: #17
RE: FileStream در دلفی
سلام.
کدهای یه فایل فلش رو درون یه فایل ذخیره کردم.
برا تبدیل مجدد آن به یک انیمیشن آون رو با یه حلقه خوندم که موفقیت آمیز بود.
مشکل اینجاست که وقتی حلقه اجرا میشه دیگه هیچ کاری نمیشه کرد (حتی نمیشه برنامه رو بست !!!)

مشکل کجاست؟ راهی به نظرتون میرسه؟
۲۸-شهریور-۱۳۸۸, ۱۴:۰۳:۳۴
ارسال‌ها
پاسخ
The.Ghost غایب
مدیر بازنشسته
*****

ارسال‌ها: 461
موضوع‌ها: 201
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 674
( 354 تشکر در 158 ارسال )
ارسال: #18
RE: FileStream در دلفی
امیدوارم بدردتون بخورد
موفق باشد شبح
کد:
////////////////////////////////////////////////////////////////////////////////
///////////////////// اضافه کردن اطلاعات به فايل ايکزه //////////////////////////

Function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if not FileExists(AFileName) then
Exit;
try
aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
MemoryStream.Seek(0, soFromBeginning);
// seek to end of File
// ans Ende der Datei Seeken
aStream.Seek(0, soFromEnd);
// copy data from MemoryStream
// Daten vom MemoryStream kopieren
aStream.CopyFrom(MemoryStream, 0);
// save Stream-Size
// die Streamgr??e speichern
iSize := MemoryStream.Size + SizeOf(Integer);
aStream.Write(iSize, SizeOf(iSize));
finally
aStream.Free;
end;
Result := True;
end;

Function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if not FileExists(AFileName) then
Exit;

try
aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
// seek to position where Stream-Size is saved
// zur Position seeken wo Streamgr??e gespeichert
aStream.Seek(-SizeOf(Integer), soFromEnd);
aStream.Read(iSize, SizeOf(iSize));
if iSize > aStream.Size then
begin
aStream.Free;
Exit;
end;
// seek to position where data is saved
// zur Position seeken an der die Daten abgelegt sind
aStream.Seek(-iSize, soFromEnd);
MemoryStream.SetSize(iSize - SizeOf(Integer));
MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
MemoryStream.Seek(0, soFromBeginning);
finally
aStream.Free;
end;
Result := True;
end;

procedure TForm1.SaveClick(Sender: TObject);
var
aStream: TMemoryStream;
begin
aStream := TMemoryStream.Create;
Memo1.Lines.SaveToStream(aStream);
AttachToFile('Test.exe', aStream);
aStream.Free;
end;

procedure TForm1.LoadClick(Sender: TObject);
var
aStream: TMemoryStream;
begin
aStream := TMemoryStream.Create;
LoadFromFile('Test.exe', aStream);
Memo1.Lines.LoadFromStream(aStream);
aStream.Free;
end;

////////////////////////////////////////////////////////////////////////////////

کد:
////////////////////////////////////////////////////////////////////////////////
/////////////////////////// جدا کردن يک فايل ///////////////////////////////////

procedure SplitFile(FileName : TFileName; FilesByteSize : Integer) ;
// FileName == file to split into several smaller files
// FilesByteSize == the size of files in bytes
var
fs, ss: TFileStream;
cnt : integer;
SplitName: String;
begin
fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) ;
try
for cnt := 1 to Trunc(fs.Size / FilesByteSize) + 1 do
begin
SplitName := ChangeFileExt(FileName, Format('%s%d', ['._',cnt])) ;
ss := TFileStream.Create(SplitName, fmCreate or fmShareExclusive) ;
try
if fs.Size - fs.Position < FilesByteSize then
FilesByteSize := fs.Size - fs.Position;
ss.CopyFrom(fs, FilesByteSize) ;
finally
ss.Free;
end;
end;
finally
fs.Free;
end;
end;
// SplitFile(edit1.Text ,40000); طریقه استفاده باید آدرس یک فایل را بنویسید و به چند بایت باید تقسیم شود

////////////////////////////////////////////////////////////////////////////////
////////////////////// متصل کردن فايل جدا شده //////////////////////////////////

procedure MergeFiles(FirstSplitFileName, OutFileName : TFileName) ;
// FirstSplitFileName == the name of the first piece of the split file
// OutFileName == the name of the resulting merged file
var
fs, ss: TFileStream;
cnt: integer;
begin
cnt := 1;
fs := TFileStream.Create(OutFileName, fmCreate or fmShareExclusive) ;
try
while FileExists(FirstSplitFileName) do
begin
ss := TFileStream.Create(FirstSplitFileName, fmOpenRead or fmShareDenyWrite) ;
try
fs.CopyFrom(ss, 0) ;
finally
ss.Free;
end;
Inc(cnt) ;
FirstSplitFileName := ChangeFileExt(FirstSplitFileName, Format('%s%d', ['._',cnt])) ;
end;
finally
fs.Free;
end;
end;
// MergeFiles('C:\New Folder\Entekhabat._1','C:\New Folder\Ent.mdb'); طریقه استفاده اول بایت اولی را میدهید و بعد فایل اصلی که با آن نام باید ساخته شود

////////////////////////////////////////////////////////////////////////////////


Assembly Language 039

(آخرین ویرایش در این ارسال: ۰۴-مهر-۱۳۸۸, ۰۲:۲۷:۴۴، توسط The.Ghost.)
۰۴-مهر-۱۳۸۸, ۰۱:۵۶:۱۷
ارسال‌ها
پاسخ
تشکر شده توسط : lord_viper, iman-63
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #19
RE: FileStream در دلفی
(۲۸-شهریور-۱۳۸۸, ۱۴:۰۳:۳۴)iman-63 نوشته است: سلام.
کدهای یه فایل فلش رو درون یه فایل ذخیره کردم.
برا تبدیل مجدد آن به یک انیمیشن آون رو با یه حلقه خوندم که موفقیت آمیز بود.
مشکل اینجاست که وقتی حلقه اجرا میشه دیگه هیچ کاری نمیشه کرد (حتی نمیشه برنامه رو بست !!!)

مشکل کجاست؟ راهی به نظرتون میرسه؟
شما داخل حلقه های طولانی باید از دستور Application.processmessage; استفاده کنید یا پردازشهای طولانی رو درون ترد ها انجام بدید
۰۴-مهر-۱۳۸۸, ۱۰:۳۱:۱۱
وب سایت ارسال‌ها
پاسخ
iman-63 آفلاین
کاربر فعال بخش الکترونیک
***

ارسال‌ها: 365
موضوع‌ها: 71
تاریخ عضویت: مرداد ۱۳۸۶

تشکرها : 62
( 332 تشکر در 148 ارسال )
ارسال: #20
RE: FileStream در دلفی
نقل قول: شما داخل حلقه های طولانی باید از دستور Application.processmessage; استفاده کنید یا پردازشهای طولانی رو درون ترد ها انجام بدید

ممکنه یه مثال بزارین .
۰۴-مهر-۱۳۸۸, ۱۰:۵۷:۵۶
ارسال‌ها
پاسخ
The.Ghost غایب
مدیر بازنشسته
*****

ارسال‌ها: 461
موضوع‌ها: 201
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 674
( 354 تشکر در 158 ارسال )
ارسال: #21
RE: FileStream در دلفی
این فایل را دانلود کن . Thread در دلفی را به خوبی توضیح داده است
موفق باشید شبح


فایل‌(های) پیوست شده
.rar   Threading.rar (اندازه: 229.67 KB / تعداد دفعات دریافت: 75)

Assembly Language 039

(آخرین ویرایش در این ارسال: ۰۴-مهر-۱۳۸۸, ۱۴:۴۲:۴۴، توسط The.Ghost.)
۰۴-مهر-۱۳۸۸, ۱۴:۳۷:۰۹
ارسال‌ها
پاسخ
تشکر شده توسط : iman-63
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #22
RE: FileStream در دلفی
فقط کافیه این دستور رو در انتهای حلقه بزارید تا mesage های داخل threadدر خلال اجرای حلقه پردازش بشن

کد:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:Integer;
begin
for i:=1 to 10000 do
begin
j:=i*100 div 10;
Caption:=IntToStr(j);
Application.ProcessMessages;
end;

end;
۰۴-مهر-۱۳۸۸, ۱۸:۴۶:۰۳
وب سایت ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Question [سوال] ساخت EDITOR مانند دلفی hameds606 3 1,463 ۱۱-خرداد-۱۳۹۸, ۱۰:۰۷:۲۳
آخرین ارسال: lord_viper
  دریافت اطلاعات از سخت افزار در دلفی m59alizadeh 6 7,169 ۰۶-آذر-۱۳۹۵, ۱۳:۰۱:۴۹
آخرین ارسال: lord_viper
  تبدیل کد به دلفی The.Ghost 2 3,691 ۱۶-فروردین-۱۳۹۴, ۲۲:۱۵:۰۴
آخرین ارسال: veyskarami
  ارسال ایمیل با دلفی h_mohamadi 13 10,453 ۱۴-آبان-۱۳۹۳, ۱۸:۰۰:۴۳
آخرین ارسال: babyy
  فیلم آموزش مدیریت استثنائات در دلفی بهروز عباسی 2 3,152 ۳۰-مرداد-۱۳۹۳, ۱۵:۵۳:۰۸
آخرین ارسال: veyskarami
  [سوال] ریجستری در دلفی spase 2 3,045 ۱۸-خرداد-۱۳۹۳, ۱۵:۵۶:۴۷
آخرین ارسال: veyskarami
  کامپوننت ترد در دلفی hesarkhani 2 3,701 ۰۲-اردیبهشت-۱۳۹۳, ۲۲:۰۸:۴۵
آخرین ارسال: The.Ghost
  سورس دلفی lord_viper 46 58,074 ۰۹-دى-۱۳۹۲, ۱۹:۳۸:۳۳
آخرین ارسال: بهروز عباسی
  [آموزشی] 6700 نکته و کد دلفی lord_viper 0 2,940 ۰۴-دى-۱۳۹۲, ۱۰:۰۴:۳۱
آخرین ارسال: lord_viper
  اخبار دلفی lord_viper 10 9,006 ۲۹-مرداد-۱۳۹۲, ۰۲:۰۳:۴۰
آخرین ارسال: veyskarami

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 9 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS