Avatar billede pfp Nybegynder
30. maj 2005 - 21:29 Der er 15 kommentarer og
1 løsning

Luk forbindelse til fil efter brug?

Hej,

Jeg downloader en fil med WebClient.DownloadFile()

Filen skal så indlæses i mit program, og bagefter skal den bare slettes igen, men hvordan gør jeg det?

Troede det var nok med Dispose() på webclienten, men det er vidst ikke det den gør alligevel:

Her er mit forsøg:
try
                {
                    WebClient client = new WebClient();
                    using (client)
                    {
                        client.DownloadFile(movie.CoverURL, @"C:\cover.tmp");
                        cover.Image = Image.FromFile(@"C:\cover.tmp");
                        client.Dispose();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    File.Delete(@"C:\cover.tmp");
                }

Som det er nu kan jeg ikke slette filen i min finally-blok, fordi filen stadig er "aktiv".

God råd modtages med kyshånd.

/pfp
Avatar billede nielle Nybegynder
30. maj 2005 - 22:25 #1
Jeg er ikke helt sikker på at du faktisk får udført din Dispose(). Prøv sådan her:

try
{
    using (WebClient client = new WebClient())
    {
        client.DownloadFile(movie.CoverURL, @"C:\cover.tmp");
        cover.Image = Image.FromFile(@"C:\cover.tmp");
        client.Dispose();
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}
finally
{
    File.Delete(@"C:\cover.tmp");
}
Avatar billede pfp Nybegynder
30. maj 2005 - 22:37 #2
Det gør desværre ingen forskel.

Den fanger ikke nogen exception med hverken din metode eller min, til gengæld kastes der så en exception i finally-blokken.

Jeg var egentlig af den opfattelse, at det smarte i at bruge using "snippeten" var at den selv lukkede sine resourcer?
Avatar billede nielle Nybegynder
30. maj 2005 - 22:40 #3
Det er det også. Rent faktisk er dit interne kald til client.Dispose() totalt overflødigt.
Avatar billede pfp Nybegynder
30. maj 2005 - 22:43 #4
"Det er det også. Rent faktisk er dit interne kald til client.Dispose() totalt overflødigt."

Ja det ved jeg egentlig godt, men man griber vel til drastiske metoder når tingene ikke virker :)
Avatar billede nielle Nybegynder
30. maj 2005 - 23:08 #5
Fandt denne her sætning under online-hjælpen for Image.FromFile metoden:

"The file remains locked until the Image object is disposed."
Avatar billede pfp Nybegynder
30. maj 2005 - 23:23 #6
Heldet er bare ikke med mig i aften:

try
{
    using (WebClient client = new WebClient())
        {
            client.DownloadFile(movie.CoverURL, @"C:\cover.tmp");
                Image img = Image.FromFile(@"C:\cover.tmp");
                cover.Image = img;
        img.Dispose();
    }
}

catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

finally
{
    File.Delete(@"C:\cover.tmp");
}

Så får jeg en exception for hele applikationen??

Debuggeren springer til:
Application.Run(new Form1());

og siger "Parameter is not valid"
Avatar billede nielle Nybegynder
30. maj 2005 - 23:30 #7
Når du går via din variabel, img, ender du faktisk med to objekter som peger på det *samme* Image - "img" og "cover.Image". Derfor går det galt når du forsøger at Dispose den ene men ikke den anden. Du kan først slette filen efter at cover er blevet nedlagt - eller at cover.Image er blevet sat til null.
Avatar billede burningice Nybegynder
31. maj 2005 - 10:52 #8
hvorfor overhovedet bruge tid og kræfter på at hente filen ned på harddisken, når at den alligevel slettes med det samme igen??!?!

Hent den ned i en Stream i hukommelsen, og brug Image.FromStream() istedet for at vise billedet i dit program.
Avatar billede pfp Nybegynder
31. maj 2005 - 13:03 #9
nielle -> Tak :)

burningice -> Det kan du da have ret i, det havde ikke lige krydset lystavlen.
Avatar billede nielle Nybegynder
31. maj 2005 - 14:17 #10
Så hvem går points til? Mig, som kuns forklarede dig hvor din kode ikke virkede, eller Burningice som rent faktisk anviste en måde at gøre det på? :^)
Avatar billede pfp Nybegynder
02. juni 2005 - 01:37 #11
nielle -> Jeg syntes da du skal have point, du svarede jo på mit spørgsmål :)

Men derfor tak til burningice alligevel for forslag til alternativ løsning på problemet.
Avatar billede nielle Nybegynder
02. juni 2005 - 16:11 #12
Svar :^)
Avatar billede burningice Nybegynder
26. juni 2005 - 19:17 #13
det var vel ikke en alternativ løsning, men mere en optimering, da der ikke er nogen grund til at gemme filen på harddisken for at slette den igen 5 linjer senere.
Avatar billede pfp Nybegynder
27. juni 2005 - 01:11 #14
Vi kan også kalde din løsning den rigtige eller primære, og så det andet for en alternativ løsning.

Opretter gerne et nyt spm. så du kan få point...
Avatar billede burningice Nybegynder
27. juni 2005 - 01:52 #15
:) nej nej, det er der skam ikke brug for. Jeg kommer gerne med svar, kommentarer og gode råd gratis.
Avatar billede pfp Nybegynder
27. juni 2005 - 09:44 #16
Tak :)
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