Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT]Pobieranie plików z paskiem postępu


Gość Pan Szymek

Rekomendowane odpowiedzi

Opublikowano

Tworzymy nowy projekt Windows Forms Application, przechodzimy do Program.cs i tworzymy nową klasę i w jej konstruktorze dopasowujemy okno do naszych wymagań

class okno : Form
{
public okno(string adresPliku, string sciezka)
{
this.Text = "Pobieracz";
this.Size = new System.Drawing.Size(259, 90);
this.TopMost = true;
}
}

 

Teraz dodamy ProgressBar, który będzie pokazywał stopień pobierania, w tym celu do konstruktora dodajemy

ProgressBar p = new ProgressBar()
{
Dock = DockStyle.Fill,
};

 

Nadszedł czas na najważniejszą część - WebClient wraz z jego zdarzeniami

System.Net.WebClient wc = new System.Net.WebClient();
wc.DownloadProgressChanged += (object sender, System.Net.DownloadProgressChangedEventArgs args) =>
{
p.Maximum = 100;
if (args.ProgressPercentage > 0 && args.ProgressPercentage < p.Maximum)
p.Value = args.ProgressPercentage;
};
wc.DownloadFileCompleted += (object sendr, System.ComponentModel.AsyncCompletedEventArgs args) =>
{
p.Value = p.Maximum;
MessageBox.Show(string.Format("Plik został pobrany do folderu {0}", sciezka));
this.Close();
};

 

Pozostało nam dodać ProgressBara do okna i pobrać plik przez klienta.

this.Controls.Add(p);
wc.DownloadFileAsync(new Uri(adresPliku), sciezka);

 

 

 

Gotowy kod:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[sTAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new okno("http://mpcforum.pl/logo.png", string.Format(@"{0}\logoMPC.png", Environment.GetFolderPath(Environment.SpecialFolder.Desktop))));
}
}
class okno : Form
{
public okno(string adresPliku, string sciezka)
{
this.Text = "Pobieracz";
this.Size = new System.Drawing.Size(259, 90);
this.TopMost = true;
ProgressBar p = new ProgressBar()
{
Dock = DockStyle.Fill,
};
System.Net.WebClient wc = new System.Net.WebClient();
wc.DownloadProgressChanged += (object sender, System.Net.DownloadProgressChangedEventArgs args) =>
{
p.Maximum = 100;
if (args.ProgressPercentage > 0 && args.ProgressPercentage < p.Maximum)
p.Value = args.ProgressPercentage;
};
wc.DownloadFileCompleted += (object sendr, System.ComponentModel.AsyncCompletedEventArgs args) =>
{
p.Value = p.Maximum;
MessageBox.Show(string.Format("Plik został pobrany do folderu {0}", sciezka));
this.Close();
};
this.Controls.Add(p);
wc.DownloadFileAsync(new Uri(adresPliku), sciezka);
}
}
}

  • 8 miesięcy temu...
Opublikowano

 

Dzięki! Pytanko, jak zrobić to z designem??

Przecież jest z oknem.

Opublikowano

tak, lecz nie mogę dodawać nic nie ingerując w kodzie

 

Poręczniejsza wersja była by z designem Form1, ...

 

PS:
Wyskakuje mi taki error;

 

 

Error    1    No overload for 'Form1_Load' matches delegate 'System.EventHandler'    C:\Documents and Settings\SysOp\Ustawienia lokalne\Dane aplikacji\Temporary Projects\Downloading\Form1.Designer.cs    50    26    Downloading
1377774857-U369478.png

Opublikowano

 

tak, lecz nie mogę dodawać nic nie ingerując w kodzie

 

Poręczniejsza wersja była by z designem Form1, ...

 

PS:

Wyskakuje mi taki error;

 

Error    1    No overload for 'Form1_Load' matches delegate 'System.EventHandler'    C:\Documents and Settings\SysOp\Ustawienia lokalne\Dane aplikacji\Temporary Projects\Downloading\Form1.Designer.cs    50    26    Downloading
Bo nie można zmieniać argumentów zdarzeń.
Opublikowano

Dzieki ziom, mi na pewno pomogłeś.

 

Dobry poradnik, trzymaj UP, za tego posta.

bez gif


  • 2 lata później...
Opublikowano

Dla chcącego nic trudnego.

Podsyłam kod który dzisiaj w nocy napisałem, a w nim:

  • pobieranie plików 
  • sprawdzanie aktualności plików
  • i własny wygląd :D

Program tworzę pod patcher gry, lecz nie wyślę wam pełnej wersji, w której również będzie tworzenie katalogów oraz dużo bardziej zaawansowany system sprawdzania poprawności plików (sumy kontrolne)

 

PS. Liczę na Like :)

 

PS2. Tam niektóre using są nie potrzebne, ale nie chce mi się już sprawdzać które :)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
            try
            {
                aktualizacja();
            }
            catch
            { MessageBox.Show("Brak połączenia z serwerem plików. \nSprawdź swoje połączenie internetowe.\n Za wszelkie utrudnienia przepraszamy"); }
        }
        public int rozmiar(String file)
        {
            FileInfo info = new FileInfo(file);
            return Convert.ToInt32(info.Length);
        }

        public void download(string adresPliku, string sciezka)
        {
            
            System.Net.WebClient wc = new System.Net.WebClient();
            wc.DownloadProgressChanged += (object sender, System.Net.DownloadProgressChangedEventArgs args) =>
            {
                button1.Enabled = false;
                button1.Text = "Aktualizowanie...";
                progressBar1.Maximum = 100;
                if (args.ProgressPercentage > 0 && args.ProgressPercentage < progressBar1.Maximum)
                    progressBar1.Value = args.ProgressPercentage;
            };
            wc.DownloadFileCompleted += (object sendr, System.ComponentModel.AsyncCompletedEventArgs args) =>
            {

                progressBar1.Value = progressBar1.Maximum;
                button1.Enabled = true;
                button1.Text = "Uruchom Grę";
                progressBar1.Hide();
            };
            wc.DownloadFileAsync(new Uri(adresPliku), sciezka);
        }
        public void aktualizacja()
        {
            download("http://whats-up.pl/owncloud/.../version.txt", "version.txt");
            Thread.Sleep(2000);
            String[] calyplik = File.ReadAllLines("version.txt");
            int ileplikow = calyplik.Length;
            for (int i = 0; i < ileplikow; i++)
            {

                string[] aktualizowanyplik = Regex.Split(calyplik[i], " ");
                if (!File.Exists(aktualizowanyplik[2]) || rozmiar(aktualizowanyplik[2]) != Convert.ToInt32(aktualizowanyplik[1]))
                {
                    MessageBox.Show(aktualizowanyplik[0] + aktualizowanyplik[2]);
                    download("http://whats-up.pl/owncloud/.../"+aktualizowanyplik[0], aktualizowanyplik[2]);

                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start("game/run.exe");
            }
            catch
            {
                MessageBox.Show("Coś poszło nie tak z aktualizacją  \n Nie mogę odnaleźć gry");
            }
        }
    }
}


Opublikowano

Dla chcącego nic trudnego.

Podsyłam kod który dzisiaj w nocy napisałem, a w nim:

 

  • pobieranie plików 
  • sprawdzanie aktualności plików
  • i własny wygląd :D
Program tworzę pod patcher gry, lecz nie wyślę wam pełnej wersji, w której również będzie tworzenie katalogów oraz dużo bardziej zaawansowany system sprawdzania poprawności plików (sumy kontrolne)

 

PS. Liczę na Like :)

 

PS2. Tam niektóre using są nie potrzebne, ale nie chce mi się już sprawdzać które :)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
            try
            {
                aktualizacja();
            }
            catch
            { MessageBox.Show("Brak połączenia z serwerem plików. \nSprawdź swoje połączenie internetowe.\n Za wszelkie utrudnienia przepraszamy"); }
        }
        public int rozmiar(String file)
        {
            FileInfo info = new FileInfo(file);
            return Convert.ToInt32(info.Length);
        }

        public void download(string adresPliku, string sciezka)
        {
            
            System.Net.WebClient wc = new System.Net.WebClient();
            wc.DownloadProgressChanged += (object sender, System.Net.DownloadProgressChangedEventArgs args) =>
            {
                button1.Enabled = false;
                button1.Text = "Aktualizowanie...";
                progressBar1.Maximum = 100;
                if (args.ProgressPercentage > 0 && args.ProgressPercentage < progressBar1.Maximum)
                    progressBar1.Value = args.ProgressPercentage;
            };
            wc.DownloadFileCompleted += (object sendr, System.ComponentModel.AsyncCompletedEventArgs args) =>
            {

                progressBar1.Value = progressBar1.Maximum;
                button1.Enabled = true;
                button1.Text = "Uruchom Grę";
                progressBar1.Hide();
            };
            wc.DownloadFileAsync(new Uri(adresPliku), sciezka);
        }
        public void aktualizacja()
        {
            download("http://whats-up.pl/owncloud/.../version.txt", "version.txt");
            Thread.Sleep(2000);
            String[] calyplik = File.ReadAllLines("version.txt");
            int ileplikow = calyplik.Length;
            for (int i = 0; i < ileplikow; i++)
            {

                string[] aktualizowanyplik = Regex.Split(calyplik[i], " ");
                if (!File.Exists(aktualizowanyplik[2]) || rozmiar(aktualizowanyplik[2]) != Convert.ToInt32(aktualizowanyplik[1]))
                {
                    MessageBox.Show(aktualizowanyplik[0] + aktualizowanyplik[2]);
                    download("http://whats-up.pl/owncloud/.../"+aktualizowanyplik[0], aktualizowanyplik[2]);

                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start("game/run.exe");
            }
            catch
            {
                MessageBox.Show("Coś poszło nie tak z aktualizacją  \n Nie mogę odnaleźć gry");
            }
        }
    }
}


 
Lepszym wyjściem byłoby sprawdzanie hashu pliku.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...