Avatar billede h-w.dk Nybegynder
10. december 2003 - 15:06 Der er 12 kommentarer

Gemme/Skrive fil?

Jeg skal lave en download manager, og bruger følgende kode...Problemet er bare at den ikke gemmer nogen fil...Hvad skal jeg gøre?

Kode:
Imports System
Imports System.IO
Imports System.Net
Imports System.Text

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim req As HttpWebRequest = CType(WebRequest.Create("http://www.microsoft.com/"), HttpWebRequest)
        Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
        Dim stm As Stream = resp.GetResponseStream
        Dim size As Long = resp.ContentLength
        Dim c As Integer
        Dim res As StringBuilder = New StringBuilder
        dim more as boolean = true
        While (more)
            c = stm.ReadByte
            If (c >= 0) Then
                res.Append(Convert.ToChar(c))
                If (res.Length Mod 1000) = 0 Then
                    Console.WriteLine("we have " & res.Length & " of " & size)
                End If
            Else
                more = false
            End If
        End While
        stm.Close
        resp.Close
    End Sub
End Class
Avatar billede arne_v Ekspert
10. december 2003 - 15:28 #1
Eksempel:

Imports System
Imports System.IO
Imports System.Net
Imports System.Text

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim req As HttpWebRequest = CType(WebRequest.Create("http://www.microsoft.com/"), HttpWebRequest)
        Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
        Dim stm As Stream = resp.GetResponseStream
        Dim size As Long = resp.ContentLength
        Dim fs As FileStream = File.Create("C:\ms.htm")
        Dim c As Integer
        dim more as boolean = true
        While (more)
            c = stm.ReadByte
            If (c >= 0) Then
                fs.WriteByte(c)
            Else
                more = false
            End If
        End While
        stm.Close
        resp.Close
        fs.Close
    End Sub
End Class
Avatar billede arne_v Ekspert
10. december 2003 - 15:31 #2
Der er andre måder at gøre det på, men det her er ihvertfald en måde.
Avatar billede h-w.dk Nybegynder
10. december 2003 - 19:04 #3
Kan man ikke vente med at skrive filen til man har hentet det hele...når jeg afvikler koden, låser programmet indtil den er helt færdig med at downloade!
Avatar billede arne_v Ekspert
10. december 2003 - 19:07 #4
Det kan du godt.

Men det er ikke skrivning til fil der tager tid. Det er selve downloaden. Så
jeg tror ikke at det hjælper på "der sker ikke noget" fornemmelsen.
Avatar billede arne_v Ekspert
10. december 2003 - 19:07 #5
Hvis du skal af med den for en større download, så skal du have en separat
download tråd.
Avatar billede h-w.dk Nybegynder
10. december 2003 - 19:08 #6
ok...hvordan får jeg den til at lade være med at låse??
Avatar billede h-w.dk Nybegynder
10. december 2003 - 19:22 #7
hmm...separat download tråd?
Avatar billede arne_v Ekspert
10. december 2003 - 19:25 #8
Jeg prøvet at bixe et eksempel.
Avatar billede arne_v Ekspert
10. december 2003 - 19:47 #9
Simpelt eksempel:

Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Threading

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim t As Thread = New Thread (AddressOf Download)
        t.Start
        While t.IsAlive
            Console.Write("*")
            Thread.Sleep(100)
        End While
        Console.WriteLine
        Console.WriteLine("done")
    End Sub
    Public Shared Sub Download
        Dim req As HttpWebRequest = CType(WebRequest.Create("http://www.microsoft.com/"), HttpWebRequest)
        Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
        Dim stm As Stream = resp.GetResponseStream
        Dim fs As FileStream = File.Create("C:\ms.htm")
        Dim c As Integer
        dim more as boolean = true
        While (more)
            c = stm.ReadByte
            If (c >= 0) Then
                fs.WriteByte(c)
            Else
                more = false
            End If
        End While
        stm.Close
        resp.Close
        fs.Close
    End Sub
End Class
Avatar billede h-w.dk Nybegynder
10. december 2003 - 20:00 #10
nu kan jeg bare ikke hente fil størrelsen, og hvor meget den har hentet??
Avatar billede arne_v Ekspert
10. december 2003 - 20:13 #11
Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Threading

Class MainClass
    Private Shared size As Long = 0
    Private Shared got As Long = 0
    Public Shared Sub Main(ByVal args As String())
        Dim t As Thread = New Thread (AddressOf Download)
        t.Start
        While t.IsAlive
            if (got > 0)
                Console.WriteLine(got/size & " percent")
            Else
                Console.WriteLine("0 perecent")
            End If
            Thread.Sleep(100)
        End While
        Console.WriteLine("done")
    End Sub
    Public Shared Sub Download
        Dim req As HttpWebRequest = CType(WebRequest.Create("http://www.microsoft.com/"), HttpWebRequest)
        Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
        Dim stm As Stream = resp.GetResponseStream
        size = resp.ContentLength
        Dim fs As FileStream = File.Create("C:\ms.htm")
        Dim c As Integer
        Dim more as boolean = true
        While (more)
            c = stm.ReadByte
            If (c >= 0) Then
                fs.WriteByte(c)
                Got = Got + 1
            Else
                more = false
            End If
        End While
        stm.Close
        resp.Close
        fs.Close
    End Sub
End Class
Avatar billede arne_v Ekspert
26. december 2003 - 16:35 #12
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
Kurser inden for grundlæggende programmering

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