Avatar billede Spotgun Seniormester
07. januar 2005 - 13:05 Der er 10 kommentarer og
1 løsning

Download fil via C# win app?

Er det muligt at få et C# til at forsøge at downloade noget fra en given url?
Jeg mangler i hvert fald en funktion man kan fodre med en url til en specifik fil (f.eks. http://www.domain.com/minfil.txt), og så vil den forsøge at downloade filen... Filtypen kan variere, så den skal bare hente hvad den nu end måtte kunne få fat på...

Er det noget HttpWebRequest vi er ovre i?
Avatar billede arne_v Ekspert
07. januar 2005 - 13:08 #1
HttpWebRequest eller WebClient
Avatar billede arne_v Ekspert
07. januar 2005 - 13:09 #2
WebClient wc = new WebClient();
        StreamReader sr = new StreamReader(wc.OpenRead(url));
        string html = sr.ReadToEnd();
Avatar billede arne_v Ekspert
07. januar 2005 - 13:10 #3
WebRequest wr = WebRequest.Create(url);
StreamReader sr = new StreamReader(wr.GetResponse().GetResponseStream());
string html = sr.ReadToEnd();
Avatar billede Spotgun Seniormester
07. januar 2005 - 13:13 #4
Prøver lige at eksperimentere med dem...
Avatar billede arne_v Ekspert
07. januar 2005 - 13:13 #5
For binære filer skal der naturligvis ikke bruges StreamReader.
Avatar billede arne_v Ekspert
07. januar 2005 - 13:14 #6
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Stream stm = resp.GetResponseStream();
        int c;
        while((c = stm.ReadByte()) >= 0) {
            // gør noget med c
        }
        stm.Close();
        resp.Close();
Avatar billede Spotgun Seniormester
07. januar 2005 - 13:19 #7
I det sidste tilfælde med den binære fil, hvordan får jeg da samlet det den har downloaded til en (forhåbentlig) hel fil, som gemmes et sted på harddisken?
Avatar billede arne_v Ekspert
07. januar 2005 - 13:25 #8
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Stream stm = resp.GetResponseStream();
        FileStream fs = new FileStream(fnm, FileMode.CreateNew);
        int c;
        while((c = stm.ReadByte()) >= 0) {
            fs.Write(c);
        }
        fs.Close();
        stm.Close();
        resp.Close();
Avatar billede arne_v Ekspert
07. januar 2005 - 13:27 #9
Ovenståend ekode er ikke særligt effektivt fordi den læser en byte af gangen.

Den bør ændres til at læse en buffer på 10000 eller 100000 bytes ad gangen.
Avatar billede Spotgun Seniormester
07. januar 2005 - 13:28 #10
Takker - det ser ud til at det lige er hvad jeg har brug for. Smider du et svar?
Avatar billede arne_v Ekspert
07. januar 2005 - 14:41 #11
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester