Einzelnen Beitrag anzeigen

gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#1

Schleife, IdFtp, Stringlisten, optimieren?

  Alt 4. Okt 2017, 17:01
Guten Tag alle zusammen.

Ich habe hier einen kleinen Code geschrieben der eigentlich TipTop funktioniert. Aber leider etwas langsam ist.
Darum wollte ich mal Allgemein fragen ob jemand hier etwas sieht das man "EINFACH" optimieren kann umd das ganze schneller zu machen?

Diese Procedure muss am Anfang komplett geladen werden damit der User anschliessend mit dem Tool arbeiten kann. (Ich lade sie über den OnFormShow Event)

Einen Thread bringt glaube ich in diesem Fall nicht so viel da ich ja warten muss bis die Procedure fertig ist. Oder bringt es trotzdem was?

Etwas was ich gestern entdeckt habe und auch nicht ganz verstehe ist: Das ich als Trennzeichen ein "," angebe aber ich es ebenfalls mit " ' " trennen kann..? Was mache ich den da falsch?


Nun ja, ich bin auf jedem Fall für alle Tipps dankbar


Delphi-Quellcode:
//Nach dem UPDATE wird noch heruntergeladen was NEU dazugekommen ist und daher beim Update Prozess
//nicht beachtet wurde.
procedure NeueModsherunterladen;
var
  I: Integer;
begin
 //Schauen ob predownload aktiviert ist:
 if form3.CheckBox1.Checked=true then begin

 //Progrssbar Max der LadeFORM erhöhen um die Anzahl Einträge in der Local List
 form6.ProgressBar1.Max:=form6.ProgressBar1.Max+local_list.Count-1;

    //Scanne alle Lokalen Einträge durch (Da ja die Local Liste bereits aktualisiert wurde, entspricht sie jetzt der Server Liste)
  for I := 0 to LOCAL_LIST.Count-1 do begin
  form6.ProgressBar1.Position:=form6.ProgressBar1.Position+1;
  //Trennt den aktuellen Eintrag der Local List!
  A:=tstringlist.Create;
  ExtractStrings([','], [], PChar(local_list.Strings[i]), a);

      //Optionaler Mod?
      if a.Strings[4]='Optional=NEINthen begin
      //Es ist KEIN Optionaler mod daher wird nun geschaut ob er bereits heruntergeladen wurde.
      if tfile.Exists(programmpfad+'ZIP\'+a.Strings[1]+'.zip')=false then begin

         //Prüfe ob die Datei auf dem Server ist ("Sicherheitsabfrage")
         if form1.IdFTP1.Size (a.Strings[1]+'.zip')>0 then begin

        //Die ZIP Datei exisitiert. also wird sie heruntergeladen / entpackt
        with form1.ProgressBar1 do
        begin
        Max := ftpsize(form1.idftp1, a.Strings[1]+'.zip');
        form1.Label5.Caption:='Content to Download: '+inttostr(max div 1024 div 1024)+' MB';
        Position := 0;
        end;

         // Download Mod
        try
        addline('INFO: download new mod...: '+a.Strings[0]+ ' Cat: '+a.Strings[2]);
        form1.IdFTP1.Get(a.Strings[1]+'.zip', Programmpfad+'ZIP\'+a.Strings[1]+'.zip', true);
        form2.Memo1.Lines[form2.Memo1.Lines.Count-1]:=('INFO: download new mod... OK'+a.Strings[0]+ ' Cat: '+a.Strings[2]);
        except
        Addline('ERROR: Download '+a.Strings[0]+'.zip - Code 963' );
        end;

        //Download Pictures
        form2.Memo1.Lines[form2.Memo1.Lines.Count-1]:=('INFO: download IMG... '+a.Strings[0]+ ' Cat: '+a.Strings[2]);
        if form1.IdFTP1.Size(a.Strings[1]+'-0.jpg')>0 then form1.IdFTP1.Get(a.Strings[1]+'-0.jpg', Programmpfad+'IMG\'+a.Strings[1]+'-0.jpg',true);
        if form1.IdFTP1.Size(a.Strings[1]+'-1.jpg')>0 then form1.IdFTP1.Get(a.Strings[1]+'-1.jpg', Programmpfad+'IMG\'+a.Strings[1]+'-1.jpg',true);
        if form1.IdFTP1.Size(a.Strings[1]+'-2.jpg')>0 then form1.IdFTP1.Get(a.Strings[1]+'-2.jpg', Programmpfad+'IMG\'+a.Strings[1]+'-2.jpg',true);
        form2.Memo1.Lines[form2.Memo1.Lines.Count-1]:=('INFO: download IMG... OK! '+a.Strings[0]+ ' Cat: '+a.Strings[2]);

         //ZIP Entpacken
         try
         form2.Memo1.Lines[form2.Memo1.Lines.Count-1]:=('INFO: extract ZIP... '+a.Strings[0]+ ' Cat: '+a.Strings[2]);
         unZipFile(Programmpfad+'ZIP\'+a.Strings[1]+'.zip', programmpfad);
         form2.Memo1.Lines[form2.Memo1.Lines.Count-1]:=('NEW MOD: '+a.Strings[0]+ ' Cat: '+a.Strings[2]);
         except
         Addline ('ERROR: Extract ZIP '+a.Strings[0]);
         end;

       end;
     end;
    end;
  end;

 end;
 //Download Content auf 0 setzen da ja nun alle Updates durch sind.
 form1.Label5.Caption:='Content to Download: 0 MB';
 //Menu RadioGroup auf ersten Eintrag setzen
 form1.RadioGroup1.ItemIndex:=0;
 //Hauptform wieder von der Taskleiste öffnen
 form1.WindowState:=wsnormal;
 //Braucht es da irgendwie da das "WindowsSkin" nicht 100% korrekt mit WSNORMAL geladen wird.
form1.Width:=form1.Width+1;
form1.Width:=form1.Width-1;
//Lade Form schliessen
form6.Close;
//Scannt alle Mods durch damit das Prog weiss welche wirklich noch im GameVerzeichniss sind (Nur komplette Mods werden wieder angekreuzelt)
Scanwotdir.Create(false);
end;
Robert

Geändert von gee21 ( 4. Okt 2017 um 17:54 Uhr)
  Mit Zitat antworten Zitat