Avatar billede madssch Nybegynder
07. marts 2006 - 17:37 Der er 3 kommentarer og
1 løsning

WebRequest med Live opdatering

Hej Eksperter!

Jeg har følgende kode:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Try

            Dim WebURL As String = "http://www.domain.dk/documents/"
            Dim FileName As String = "vsnet.doc"
            Dim Request As HttpWebRequest = CType(WebRequest.Create(WebURL & FileName), HttpWebRequest)
            Dim Response As HttpWebResponse = CType(Request.GetResponse, HttpWebResponse)
            Dim TotalFileSize As Long = Response.ContentLength
            Dim CurrentFileSize As Long
            Dim InStream As Stream = Response.GetResponseStream
            Dim OutStream As Stream = New FileStream(FileName, FileMode.CreateNew, FileAccess.Write)
            Dim b(1000) As Byte
            Dim n As Integer

            n = InStream.Read(b, 0, b.Length)

            While (n > 0)
                OutStream.Write(b, 0, n)
                n = InStream.Read(b, 0, b.Length)
                Me.ProcessLabel.Text = CurrentFileSize & " - " & TotalFileSize & " - "
            End While

            OutStream.Close()
            InStream.Close()
            Response.Close()

            Me.ProcessLabel.Text = "Check udført korrekt"

        Catch ex As Exception

            MessageBox.Show(ex.Message.ToString(), "Fejlbesked", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

Kort fortalt downloader den en fil fra en server.

Da funktionen hovedsageligt kommer til at hente større filer, vil jeg gerne have funktionen til at implementere Progressbaren samt skrive hvor meget af den fulde filstørrelse den har hentet.

Kan nogen hjælpe med dette?

Så vidt jeg kan se ud af funktionen (som jeg har "lånt" og tilpasset), skulle de fleste oplysninger allerede være tilgængelige..?

Jeg har meget lidt erfaring med VB.NET, så jeg håber på et eksempel med tilhørende god forklaring.

På forhånd tak!
Avatar billede arne_v Ekspert
07. marts 2006 - 18:51 #1
I only have it in C#:

using System;
using System.Drawing;
using System.IO;
using System.Net;
using System.Windows.Forms;
using System.Threading;

public class MainForm : Form
{
    private ProgressBar bar;
    private Button start;
    private Button abort;
    private Thread t;
    public MainForm()
    {
        bar = new ProgressBar();
        start = new Button();
        abort = new Button();
        SuspendLayout();
        bar.Location = new Point(50, 50);
        bar.Size = new Size(200, 50);
        bar.Name = "Progress Bar";
        start.Location = new Point(50,150);
        start.Size = new Size(200, 50);
        start.Name = "Start Button";
        start.Text = "Start";
        start.Click += new EventHandler(StartClick);
        abort.Location = new Point(50,250);
        abort.Size = new Size(200, 50);
        abort.Name = "Abort Button";
        abort.Text = "Abort";
        abort.Click += new EventHandler(AbortClick);
        ClientSize = new Size(300, 350);
        Controls.Add(bar);
        Controls.Add(start);
        Controls.Add(abort);
        Name = "Main Form";
        Text = "Main Form";
        ResumeLayout(false);
    }
    void Reset(int n)
    {
        bar.Minimum = 0;
        bar.Maximum = n;
        bar.Value = 0;
    }
    void Update(int n)
    {
        bar.Value = n;
    }
    delegate void ResetHandler(int n);
    delegate void UpdateHandler(int n);
    void Copy()
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.tmk.c
om/ftp/vms-freeware/fileserv/unzip.zip");
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        int tot = (int)resp.ContentLength;
        if(bar.InvokeRequired)
        {
            bar.Invoke(new ResetHandler(Reset), new object[] { tot });
        }
        else
        {
            Reset(tot);
        }
        Stream f1 = resp.GetResponseStream();
        Stream f2 = new FileStream(@"C:\unzip.zip", FileMode.CreateNew, FileAcce
ss.Write);
        int sofar = 0;
        byte[] b = new byte[1000];
        int n;
        while((n = f1.Read(b, 0, b.Length)) > 0 )
        {
            f2.Write(b, 0, n);
            sofar += n;
            if(bar.InvokeRequired)
            {
                bar.Invoke(new UpdateHandler(Update), new object[] { sofar });
            }
            else
            {
                Update(sofar);
            }
        }
        f2.Close();
        f1.Close();
        resp.Close();
    }
    void StartClick(object sender, EventArgs e)
    {
        t = new Thread(new ThreadStart(Copy));
        t.Start();
    }
    void AbortClick(object sender, EventArgs e)
    {
        t.Abort();
    }
    [STAThread]
    public static void Main(string[] args)
    {
        Application.Run(new MainForm());
        Application.Exit();
        Environment.Exit(0);
    }
}
Avatar billede madssch Nybegynder
07. marts 2006 - 18:58 #2
Jeg er bange for, at min manglende erfaring ikke tillader mig at konvertere det il VB.NET.

Er netop startet med at lære VB.NET og Visual Studio, så det er desværre nok lidt for stor en mundfuld.

Ville man kunne konvertere det? C# og VB skulle ligne hinanden til forveksling..?
Avatar billede arne_v Ekspert
07. marts 2006 - 20:02 #3
No problem.

Jeg tror faktisk saagar at jeg har konverteret den til VB.NET i et tidligere
spoergsmaal, men det kan jeg ikke lige finde.

Men jeg leder efter det senere.
Avatar billede madssch Nybegynder
08. marts 2006 - 19:50 #4
Fik selv kodet mig frem til det...
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