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 user profile iconGausi: 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
//Erstelle Client
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;

//Umrechnen in Mb, Kb oder bytes -
Size := Size / 10000//Umrechnung weiß ich jetzt nicht - ausprobieren...

//Eintragen
ListView.Items.Item[i].SubItems.Strings[0] := floatToStr(Size) + ' Mb';

//Disconnect
client.Disconnect;
end;

//Freigeben
client.Free;


lg


Novo - So 07.10.07 16:55

user profile iconGausi 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!
user defined image


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 user profile iconChristian S.: Quote- durch Delphi-Tags ersetzt


Novo - So 07.10.07 17:13

user profile iconIceBube 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(''//Wenn du das nicht hinzufügst...tritt der Fehler auf!


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

user profile iconNovo 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

user profile iconLuckie 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


IceBube - Di 09.10.07 20:53

Suche bei Google FORMAT :DELPHI


Novo - Mi 10.10.07 18:09

user profile iconIceBube hat folgendes geschrieben:
Suche bei Google FORMAT :DELPHI


Nach langem wühlen
http://www.dsdt.info/tipps/?id=151
aber ich schaffs bloss, 3 stellen von vorne...
3 stellen von hinten net :-(


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: