EasyDelphi Q&A

.تم الانتقال للموقع الجديد . وسيبقى الموقع القديم هذا متاح للقراءة فقط حتى الانتهاء من نقل كل الاسئلة إلى الموقع الجديد

يمكنك طرح الاسئلة والنقاشات في الموقع الجديد. الذهاب للموقع الجديد


+1 تصويت
131 مشاهدات

السلام عليكم

عندي الكود الاتي  كيف اضيف له loop لتحميل الملف كامل

var fs:tfilestream;
str:tstream;
 I: Integer;
begin

   if OpenDialog1.Execute  then
   begin
   fs:=TFileStream.Create(OpenDialog1.FileName,fmCreate );
   fs.Position:=0;
   str:=http.Get(edit1.text).ContentStream;
   //loop to the end of stream and save it
  fs.CopyFrom(str,sizeof(str));
  FreeAndNil(fs);
   end;

 

سُئل في تصنيف fmx بواسطة (1,360 نقاط) | 131 مشاهدات

2 إجابة

+2 تصويتات
أفضل إجابة

,وعليكم السلام ورحمة الله وبركاته 

اولا تاكد من ان الرابط مباشر ويدعم الاستكمال 

ثانيا نصيحة استخدم الثريد دائما لتجنب ثقل البرنامج 

ثالثا تفضل

var
  fs: tfilestream;
begin
  SaveDialog1.FileName := 'Your file.rar';
  if SaveDialog1.Execute then
  begin

    tthread.CreateAnonymousThread(
      procedure
      begin
        try
          fs := tfilestream.Create(SaveDialog1.FileName, fmCreate);
          http.Get(Edit1.text, fs);
          tthread.Synchronize(tthread.CurrentThread,
            procedure
            begin
              self.Caption := 'Downloading.....';

            end);

        finally
          FreeAndNil(fs);
          self.Caption := 'Done';
        end;
      end).Start;

  end;

 

 

 

 

 

 

تم الرد عليه بواسطة (2,870 نقاط)
مختارة بواسطة
+2
استخدم queue بدل من Synchronize
0
بارك الله فيك الكود يعمل جيدا  لكن بخصوص الكود الذي وضعته اريد معرفة سبب عدم اشتغاله
+1 تصويت
ال CopyFrom فيها حلقة loop تقوم بنسخ كامل الستريم، من خلال buffer داخلية، المشكلة ليست هنا
المشكة ان ContentStream قد تكون MemoryStream اي ان ال httpget سوف يحمل الملف كاملاً في الذاكرة قبل السماح لك بتخزينه على ملف،
قم بتتبع الContentStream لتتأكد، اما اذا كان من هذا النوع.
تم الرد عليه بواسطة (16,020 نقاط)
0
بارك الله فيك وما الحل ؟
+1
الحل موجود في الجواب الثاني، هنالك فرق بين

str:=http.Get(edit1.text).ContentStream;

و بين

http.Get(Edit1.text, fs);
0
الاجابة الثانية هي الاصح، ضعها كإجابة صحيحة

اسئلة متعلقة

+1 تصويت
3 إجابة
سُئل نوفمبر 2، 2019 في تصنيف Delphi بواسطة zaher (16,020 نقاط) | 297 مشاهدات
0 تصويتات
0 إجابة
سُئل أبريل 5 في تصنيف fmx بواسطة فطيمي بلال (120 نقاط) | 27 مشاهدات
0 تصويتات
2 إجابة
سُئل نوفمبر 21، 2019 في تصنيف fmx بواسطة xorpas (1,360 نقاط) | 202 مشاهدات
+1 تصويت
0 إجابة
سُئل مايو 19، 2019 في تصنيف vcl بواسطة SamerAssil (32,580 نقاط) | 30 مشاهدات
0 تصويتات
2 إجابة
سُئل أغسطس 27، 2019 في تصنيف Database بواسطة Amar Gozim (11,220 نقاط) | 82 مشاهدات
ادعُ اصدقائك في الفايسبوك لمشاركتك
Comodo SSL

مرحبًا بك إلى EasyDelphi Q&A، حيث يمكنك طرح الأسئلة والحصول على الإجابة عليها من المستخدمين الآخرين.

لا يسمح بطلب او السؤال عن كراك او تفعيل او كسر او فك او اي شيء يخالف اتفاقيات الترخيص  مهما كان السبب ومهما كان البرنامج ونوعه. ولا حتى نشر روابط تحتوي على مثل هذه الاشياء لا في الاسئلة ولا في الاجابات ولا التعليقات . نهائيا

497 سؤال
752 إجابة
1,417 تعليق
275 مستخدم