Entwickler-Ecke
Internet / Netzwerk - TListView Dateigröße ermitteln
Novo - So 07.10.07 15:50
Titel: TListView Dateigröße ermitteln
Ich habe ein Projekt hier:
http://www.delphi-forum.de/viewtopic.php?p=465623
Sourcecode zum Nachvollziehen gibts im Link oben!
Dazu habe ich ein paar fragen:
Ich habe eine TListView mit 3 Spalten (Links, Größe, Status) und X Einträgen
Ich kann die Dateigröße ermitteln von einem Link... wie aber kann ich
von allen Links die Dateigröße ermitteln und anzeigen lassen?
greez Novo
Moderiert von
Gausi: Topic aus VCL (Visual Component Library) verschoben am So 07.10.2007 um 16:25
Gausi - So 07.10.07 16:24
Solange du mit dem Download nicht anfängst, geht das so weit ich weiß überhaupt nicht. Woher soll dein Programm auch wissen, wie groß irgendeine Datei irgendwo im Netz ist.
Wenn der DL läuft, hängt das wohl davon ab, wie du das genau runterlädst - die Indys können sowas bestimmt :nixweiss:
IceBube - So 07.10.07 16:55
Alle Links mit einer Schleife durchgehen....
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| var client : TidHttp; Size : real; i : integer; begin client := TidHttp.Create(nil); client.AllowCookies := false; client.HandleRedirects := true; for i := 0 to ListView.Items.Count-1 do begin Application.ProcessMessages; client.Head(ListView.Items.Item[i].Caption); Size := client.Response.ContentLength;
Size := Size / 10000; ListView.Items.Item[i].SubItems.Strings[0] := floatToStr(Size) + ' Mb';
client.Disconnect; end;
client.Free; |
lg
Novo - So 07.10.07 16:55
Gausi hat folgendes geschrieben: |
| Solange du mit dem Download nicht anfängst, geht das so weit ich weiß überhaupt nicht. Woher soll dein Programm auch wissen, wie groß irgendeine Datei irgendwo im Netz ist. |
Das geht schon, denn ich hab ein Programm, beidem deas Funktioniert:
Der läd erst die Links aus der .ini Datei und dann werden nach und nach die Dateigrößen angezeigt.
EDIT:
So kann ich die Dateigröße einer Datei kommen, wenn ich sie Runterladen will.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); lblDatei.Caption := IntToStr(AWorkCount div 1024) + ' KB von ' + KB+' KB';
procedure TForm1.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer); KB := IntToStr(AWorkCountMax div 1024); |
Siehe Screen:
EDIT:
Das ist das Original Programm, was ich da aus Spass versuche, nachzuprogrammieren!
IceBube - So 07.10.07 17:06
Delphi-Quelltext
1:
| Das geht schon, denn ich hab ein Programm, beidem deas Funktioniert: |
Nein....um an die Dateigröße einer Datei im Internet zu kommen muss man erst kontakt mit der Datei bekommen(siehe oben Code)....Mit der Funktion "client.Head" werden halt nur die Header heruntergeladen - !
.: Das Programm von dem du sprichst macht das bestimmt auch soo!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); lblDatei.Caption := IntToStr(AWorkCount div 1024) + ' KB von ' + KB+' KB';
procedure TForm1.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer); KB := IntToStr(AWorkCountMax div 1024); |
^Auch eine Möglichkeit nur meiner Meinung etwas aufwendiger(unötige Proceduren) - wenn man es auch einfach mit "ContentLength" bekommen kann .)
Moderiert von
Christian S.: Quote- durch Delphi-Tags ersetzt
Novo - So 07.10.07 17:13
IceBube hat folgendes geschrieben: |
Alle Links mit einer Schleife durchgehen....
...
lg |
Habe es genau so unter Form1.Create eingegeben, aber es kommt:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EStringListError aufgetreten. Meldung: 'Listenindex überschreitet das Maximum (0)'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
IceBube - So 07.10.07 17:40
^Weil
Delphi-Quelltext
1:
| ListView.Items.Item[i].SubItems.Strings[0] := floatToStr(Size) + ' Mb'; |
Ich wusste nicht wieviel SubItems du hast^
P.s: In der Fehlermeldung steht es bereits - das der Index von 0 überschritten ist! Dann gibts das "SubItems.Strings[0] nicht!!!
Ich denke du hast beim Hinzufügen des Items in die ListView folgendes vergessen:
Delphi-Quelltext
1: 2: 3: 4:
| var Item : TListItem; begin Item := ListView.Items.Add; Item.SubItems.Apppend('') |
Novo - So 07.10.07 19:13
EDIT:
Ok habs jetzt, aber als wass wird denn Size angegeben?
In Kilobyte?
na weil 8945,9477 MB kan nnet stimmen
KB sind a aber au net
Novo - So 07.10.07 22:50
-> FAST ERLEDIGT, die richtige Formatierung fehlt noch .. also XXX.XXX oder XX.XXX <-
Wie in dem Screenshot paar posts obendrüber!
Also ich mein
entweder 100.000 KB
oder 10.000 KB
immer 3 stellen von hinten ein '.'
Novo - Mo 08.10.07 20:47
Novo hat folgendes geschrieben: |
-> FAST ERLEDIGT, die richtige Formatierung fehlt noch .. also XXX.XXX oder XX.XXX <-
Wie in dem Screenshot paar posts obendrüber!
Also ich mein
entweder 100.000 KB
oder 10.000 KB
immer 3 stellen von hinten ein '.' |
keiner?
:-(
FormatFload bringts da irgendwie nicht
Delete - Mo 08.10.07 21:09
Aber Format ganz bestimmt.
Novo - Di 09.10.07 20:10
Luckie hat folgendes geschrieben: |
| Aber Format ganz bestimmt. |
Danke hättst gleich code dazugeben könn aber ok thx
werd mal F1 bemühen :P
greez Novo
Masteryugi - Do 11.10.07 22:49
Titel: Die lösung naht^^
also hier, des is der code:
Delphi-Quelltext
1:
| edit2.Text:=Format('%3.0n',[strtofloat(edit1.Text)]) |
was folgendes ergibt:
Quelltext
1: 2:
| 10425 -->10.425 104254356 -->104.254.356 |
So um deine anderen Probleme kümmere ich mich noch- eins haste jetzt weniger :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!