24. maj 2003 - 12:14Der er
21 kommentarer og 2 løsninger
temp fil til download manager
Hej
JEg er igang med en download manager, men hvordan laver jeg en tempfil for hver download, så at jeg kan >>Resume<< hvis computeren går ned eller noget ala det??
Det er vel noget med at du skal lave en fil som du løbende åbner og gemmer data'en i, dog ikke for hver byte du downloader. Hvis du nu laver en record alla TByteArray = Array[0..1023] of byte; // 1 KiloByte men det kan altid ændres hvor du gemmer det du downloader. Hver gang dette array så er fyldt append'er du det til den tilhørende resume fil (file of TByteArray). Dvs. når du starter en ny download opretter du en fil med et vilkårligt filnavn (måske et tilfældigt tal), hvor du i de første par bytearrays skriver hvor filen skal gemmes og hvor denne skal hentes fra. Disse oplysninger finder du selvfølgelig en måde at huske på imens programmet kører. Når du så starter programmet tjekker dette i en bestemt folder efter resume-/temp-filer, læser disse og kan så fortsætte hvor det slap. Hvis noget går galt og/eller programmet lukkes er det kun det aktuelle bytearray (din buffer) der går tabt (dvs. array'et aldrig bliver fyld og skrevet til filen). Når du skal resume'e kan du (hvis vi siger at du kun lagre fil-info i det første array af temp-filen) bare begynde at hente remote-filen fra den position ([antal-bytearray]-1)*1024 bytes.
Tjoo, jeg kan da prøve, men som sagt har jeg ikke prøvet det i praksis og som så meget andet er det lettere sagt end gjortm så det tager lidt tid (og det bliver ikke lige med det samme).
Nu har jeg kikket lidt på det og må desværre melde pas i denne omgang. Jeg er rimelig sikker på hvordan fil-delen skal laves, men jeg ved ikke helt hvordan jeg skal lave et eksempel uden download-delen og denne volder mig lidt problemer.
Hvis du nu prøver at forklare hvordan du ordner download-delen kan det være at jeg kan hjælpe dig med at implementere fil-delen.
Det er som sagt et eksempel så det er langt fra den kønneste kode, men du overlever nok. Det er en lille bug jeg ikke lige kunne få øje på (uden at bruge mere tid) der gør at der mangler en byte når man resumer, men jeg håber du kan se idéen i eksemplet og måske selv finde fejlen. Det drejer sig højeste sandsyndlig om noget så simpelt som en plus/minus der gør at den f.eks. "glemmer" en byte.
Jeg stiftede først bekendskab med Indy forleden, så der er sikkert heller ikke gjort på den mest effektive måde. Hvis der er noget i koden du ikke kan følge så bare sig til.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.