Url size, http download uden TFileStream og resumesupport på url.
Hejsa Eksperter!Jeg er i gang med et program som bl.a. skal kunne hente filer fra nettet. Her er jeg stødt på følgende problemer:
- Hvordan bestemmer jeg størrelsen på filen uden at begynde at hente den først?
- Når jeg henter en fil (bruger Indy, TIdHTTP), så gør jeg det på følgende måde:
var
fs: TFileStream;
begin
fs := TFileStream.Create('C:\fil.zip', fmCreate);
idHttp.Get('http://kilde.dk/fil.zip', fs);
end;
Så har jeg sat OnWork, OnBeginWork og OnEndWork for idHttp, og kan nu fint følge med i hvad der foregår vha. en progressbar. Mit TFileStream opretter en ny fil og lægger indholdet ned i den. Fint nok, men før den gør det fylder den hele filen med nuller. Det betyder at hvis jeg ønsker at hente en fil på f.eks. 100 MB med mit program, så skal programmet først skrive 100*1024*1024 nuller til harddisken før den kan begynde at downloade. Så er det pludselig ikke sjovt at hente filer og samtidig være i pladsmangel.
- Hvis jeg bliver smidt af mens jeg henter en fil, kunne det jo være rart at kunne genoptage downloadingen. Hvordan?
- Hvad gør jeg hvis brugeren ønsker at hente en fil fra en FTP-server?
Jeg ved at diverse downloadmanagers ikke har noget problem med sådanne ting, så er der nogen der kan forklare mig hvordan det hænger sammen?
Omkring at finde størrelsen på en URL har jeg selv fundet http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20399561.html men med det første eksempel synes jeg det går for langsomt og i det andet er man afhængig af en DLL, som det ikke er sikkert at alle der skal bruge programmet har (WinInet).
Hvordan løser jeg så de problemer? :)
//hermandsen
