Programátorská sociální síť a materiálová základna pro C#, Java, PHP, HTML, CSS, JavaScript a další.


Přihlásit se Registrace  
22.06.2012 22:43:02
Avatar
Energy
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Jak udělám stáhnutí třeba na tlačítko z nějáké webové stránky.


Odpovědět   i++; | i--;
22.06.2012 22:47:33
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Energy:

Ahoj,
moc nechápu dotaz... Zkoušel jsi na soubor odkázat klasicky přes <a href...> ?


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
22.06.2012 23:09:35
Avatar
Energy
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

No prostě máš na stránce soubor. Ve visual studiu button a chci na button stahnou ten soubor. Delam si launcher. Na hru a chci stahovani aktualizaci vim ze to jde nejak automaticky ale chci to takto.


Odpovědět   i++; | i--;
22.06.2012 23:11:57
Avatar
Energy
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Vlastně patcher na hru :).


Odpovědět   i++; | i--;
22.06.2012 23:39:38
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Energy:

Ajó, promiň já si nevšiml C#.

Líbit se ti bude nejspíš tohle:

private void Button1_Click(object sender, EventArgs e)
{
  WebClient webClient = new WebClient();
  webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
  webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
  webClient.DownloadFileAsync(new Uri("http://www.neco.cz/soubor.exe"), @"c:\cesta\soubor.exe");
}

private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
  progressBar.Value = e.ProgressPercentage;
}

private void Completed(object sender, AsyncCompletedEventArgs e)
{
  // staženo
}

Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
23.06.2012 00:01:13
Avatar
Energy
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Přesně díky :D


Odpovědět   i++; | i--;
23.06.2012 13:43:52
Avatar
Energy
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Nevím proč ale v "WebClient" a "DownloadProgres­sChangedEventAr­gs" mi to pořád hází chybu.


Odpovědět   i++; | i--;
23.06.2012 13:48:18
Avatar
Energy
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Tak teď už jenom tady "DownloadProgres­sChangedEventAr­gs" Chyba:

Error  1       The type or namespace name 'DownloadProgressChangedEventArgs' could not be found (are you missing a using directive or an assembly reference?)  C:\Users\Jakub\AppData\Local\Temporary Projects\launcher\Form1.cs       27      53      launcher

Odpovědět   i++; | i--;
23.06.2012 15:33:14
Avatar
sdraco
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Energy:

Chyba ti říká: "are you missing a using directive?"

Možná by bylo dobré přidat příslušný using. Když myší klikneš na WebClient, měla by se ti po chvíli zobrazit taková šipka a vyjede ti automaticky možnost to doplnit. Nebo nahoru dopiš:

using System.Net;

To je jmenný prostor, kde se nachází příslušná logika.


Odpovědět   i++; | i--;
Čtverec, čtverec, čtverec, čtverec.
25.08.2012 12:38:48
Avatar
Army
Neregistrovaný

Ahoj zajímalo by mě jestli to jde udělat i v konzolové aplikaci.


Odpovědět
25.08.2012 12:54:53
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Army:

Samozřejmě :)


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
25.08.2012 13:27:50
Avatar
Army
Neregistrovaný

Napsal by jsi prosím podobný příklad jako u prvního dotazu?


Odpovědět
28.08.2012 08:36:56
Avatar
Army
Neregistrovaný

Na konzolovou aplikaci.


Odpovědět
28.08.2012 08:50:54
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Army:

Je to úplně stejné. Akorát si změníš událost, které vyvolá to stahování.


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
28.08.2012 09:12:49
Avatar
matesax
Redaktor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Army:

No úplně stejně...

using System;
using System.Net;
using System.ComponentModel;

namespace ConsoleApplication1
{
    class Program
    {
        static WebClient webClient;

        static void Main(string[] args)
        {
            webClient = new WebClient();
            webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
            webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
            webClient.DownloadFileAsync(new Uri("http://www.neco.cz/soubor.exe"), @"c:\cesta\soubor.exe");
        }

        static void ProgressBar(int actualProgressPercentage)
        {
            if (actualProgressPercentage < 0 || actualProgressPercentage >= 100)
                throw new InvalidOperationException("Procenta procesu stažení souboru jsou mimo stupnici!");

            Console.Write("\r{0}{1}% complete", "Downloading...", (int)(100 * (actualProgressPercentage + 1)) / 100);

            if (actualProgressPercentage == 99)
                Console.WriteLine(Environment.NewLine);
        }

        static void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            ProgressBar(e.ProgressPercentage);
        }

        static void Completed(object sender, AsyncCompletedEventArgs e)
        {
            // staženo
        }
    }
}

Odpovědět   i++; | i--;
30.08.2012 10:04:51
Avatar
Army
Neregistrovaný

matesax proč jsi dal do konzolové aplikace progressBar? Soubor se mi stáhne pouze pokud spustím program jako správce a ze souboru .txt se udělal soubor.exe.


Odpovědět
30.08.2012 10:11:10
Avatar
Kit
Moderátor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Army:

Musíš si sám vyházet všechny zbytečnosti kolem grafiky. Jak tak koukám, z toho programu nezbude skoro nic. Vše podstatné je zde:

webClient = new WebClient();
 webClient.DownloadFileAsync(new Uri("http://www.neco.cz/soubor.exe"), @"c:\cesta\soubor.exe");

a trocha omáčky okolo.


Odpovědět   i++; | i--;
Aplikace je hotova až tehdy, když z ní nelze nic odebrat.
30.08.2012 10:15:03
Avatar
Army
Neregistrovaný

Ano přesně to jsem udělal. Ale nejde něják nastavit ten správce?


Odpovědět
30.08.2012 10:19:02
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Army:

Vytvoř si manifest a napiš tam tohle:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

Mezi ty tagy requestedprivileges někam.


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
30.08.2012 10:20:40
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Army:

A pak to ještě můžeš zkontrolovat při spouštění programu v Program.cs

WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());

if (principal.IsInRole(WindowsBuiltInRole.Administrator))
       Application.Run(new Form1());
else
       MessageBox.Show("Program ke svému běhu potřebuje práva administrátora!");

Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
30.08.2012 10:29:17
Avatar
matesax
Redaktor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Army:

To není grafický progressbar - je to přesně pro konzoli... Když to dáváš do souboru s koncovkou exe, bude to v exe - můj kód je v pořádku...

Popsal jsem ti to:

using System;
using System.Net;
using System.ComponentModel;

namespace ConsoleApplication1
{
    class Program
    {
        static WebClient webClient;

        static void Main(string[] args)
        {
            webClient = new WebClient();
            webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
            webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
            webClient.DownloadFileAsync(new Uri("http://www.neco.cz/soubor.Tady máš koncovku"), @"c:\cesta\soubor.kterou dáš sem!");
        }

        static void ProgressBar(int actualProgressPercentage)
        {
            if (actualProgressPercentage < 0 || actualProgressPercentage >= 100)
                throw new InvalidOperationException("Procenta procesu stažení souboru jsou mimo stupnici!");

            Console.Write("\r{0}{1}% complete", "Downloading...", (int)(actualProgressPercentage + 1));

            if (actualProgressPercentage == 99)
                Console.WriteLine(Environment.NewLine);
        }

        static void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            ProgressBar(e.ProgressPercentage);
        }

        static void Completed(object sender, AsyncCompletedEventArgs e)
        {
            // staženo
        }
    }
}

Odpovědět   i++; | i--;
30.08.2012 10:30:18
Avatar
matesax
Redaktor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot

A ano musíš spustit program jako správce - tak jako tak - to nejde změnit...


Odpovědět   i++; | i--;
30.08.2012 10:32:29
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax:

Pokud nebude ukládat soubor na OS >=Vista do disku C, který je systémové chráněn proti neoprávněnému zápisu. Ale do jiného oddílu tak administrátorská privilegia nepotřebuje. To samé platí pro osobní dokumenty a složku Appdata.


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
30.08.2012 10:37:07
Avatar
matesax
Redaktor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na sczdavos:

Ano - to je samozřejmé - bráním pouze svůj kód - přecijen jsem si na něm dal záležet...


Odpovědět   i++; | i--;
30.08.2012 10:40:01
Avatar
Kit
Moderátor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax:

A co má dělat, když ten program nechce spouštět jako správce? To se přece zásadně nedělá.


Odpovědět   i++; | i--;
Aplikace je hotova až tehdy, když z ní nelze nic odebrat.
30.08.2012 10:44:29
Avatar
matesax
Redaktor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Kit:

Vždyť není potřeba stahovat do jiných složek, než do těch, na která práva nepotřebuješ - ne? Naopak stahovat do C, nebo do Program Files je spíš blbost...


Odpovědět   i++; | i--;
30.08.2012 12:09:46
Avatar
Kit
Moderátor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax:

Cituji: "matesax: A ano musíš spustit program jako správce - tak jako tak - to nejde změnit..."

Tuto větu považuji za blbost. Proto jsem se ptal, jak jsi to myslel a co má dělat, když ho chce spouštět jako řádný uživatel.


Odpovědět   i++; | i--;
Aplikace je hotova až tehdy, když z ní nelze nic odebrat.
30.08.2012 12:15:58
Avatar
matesax
Redaktor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Kit:

Odpověděl jsem s tím, že hodlá stahovat do složky, na kterou to povolení bude potřebovat - v takovém případě prostě nejde nic jiného dělat - tak jsem to napsal a myslel. A jak jsem napsal - bránil jsem jen svůj kód...


Odpovědět   i++; | i--;
30.08.2012 12:34:21
Avatar
Kit
Moderátor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax:

Tady vůbec nebyl předpoklad, že by to stahoval do složky, na kterou by neměl oprávnění. To sis vymyslel. Army si stěžoval, že spuštění tvého programu vyžaduje oprávnění správce a že se mu změnila přípona. Místo toho, abys mu poradil, že si musí změnit string "c:\cesta\soubor.exe" třeba na "Form1.cs", píšeš "A ano musíš spustit program jako správce".


Odpovědět   i++; | i--;
Aplikace je hotova až tehdy, když z ní nelze nic odebrat.
30.08.2012 12:39:56
Avatar
matesax
Redaktor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Kit:

Odpověděl jsem mu ukázkou. Za změnu si mohl sám - to jsem mu tam vysvětlil - do cílového souboru musí napsat správnou příponu. A povolení to může chtít jedině při přístupu do složek s povolením...


Odpovědět   i++; | i--;
30.08.2012 12:48:42
Avatar
Kit
Moderátor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax:

Army už to má určitě opraveno, tak to necháme být.

Stejně je to v C# dost náročné. V jiných jazycích je to na 1-2 řádky. Zrovna tento příklad bych určitě v C# (vlastně ani v jiném jazyku) nedělal, raději bych použil nějaký hotový systémový nástroj.


Odpovědět   i++; | i--;
Aplikace je hotova až tehdy, když z ní nelze nic odebrat.
30.08.2012 12:57:08
Avatar
sdraco
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot

Nějak opět nevím, co se tu řeší.

Program se na spuštění jako správce dotáže, pokud bude mít manifest. Je to tak správně, program si nesmí jen tak hrabat na systémový disk a proto mu to jinak nebude dovoleno. Řeší se to tak u všech updaterů např. FireFox a další.

Tato kontrola tam být musí, jelikož dle architektury Windows hra patří do složky Program Files, do které je podmíněný zápis. Je to tak dobře, když chce program zapsat data uživatele, může do jeho složky. Když chce program měnit data sebe nebo jiného programu, musí se zeptat. Vzniká tak kontrola nad tím, co se děje a zároveň jsou vývojáři nuceni psát programy pořádně, aby byly multiuživatelské.


Odpovědět   i++; | i--;
Čtverec, čtverec, čtverec, čtverec.
30.08.2012 12:58:10
Avatar
matesax
Redaktor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot

1 - 2 řádky?

new WebClient().DownloadFileAsync(new Uri("http://www.neco.cz/soubor.exe"), @"c:\cesta\soubor.exe");

No musím uznat - je to opravdu náročné...


Odpovědět   i++; | i--;
30.08.2012 13:27:39
Avatar
Kit
Moderátor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na sdraco:

Aha, neuvědomil jsem si, že hra se ve Windows nedá nainstalovat bez oprávnění správce. Nepřipadá mi to sice logické, ale budiž. Také jsem si myslel, že se jedná o uživatelská data, která patří do uživatelského prostoru (přípona .cs).


Odpovědět   i++; | i--;
Aplikace je hotova až tehdy, když z ní nelze nic odebrat.
30.08.2012 13:30:05
Avatar
Kit
Moderátor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax:

No vida. Stačil jediný řádek bez zbytečných deklarací. Zřejmě přesně tohle Army potřeboval.


Odpovědět   i++; | i--;
Aplikace je hotova až tehdy, když z ní nelze nic odebrat.
30.08.2012 13:39:04
Avatar
sdraco
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Kit:

.cs je přípona zdrojáku v C#, nevím, proč by to někdo někam instaloval, ale pokud ano, dá to normálně do appdata, tam se psát může. Politika je zkrátka taková, že pro data uživatele oprávnění potřeba není, ale pro změnu programu je.


Odpovědět   i++; | i--;
Čtverec, čtverec, čtverec, čtverec.
30.08.2012 13:52:34
Avatar
Kit
Moderátor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na sdraco:

Když se tak dívám do historie, Army vlastně chtěl automatizovaně stáhnout .txt, který se zřejmě na webu občas mění. O instalaci nebyla řeč. Když použil příklad od matesaxe, tak se mu změnila přípona na .exe a vyžadovalo to oprávnění správce. Toho se chtěl zbavit. Netušil totiž, že do 2. parametru musí dát správný cílový název souboru, tedy s příponou .txt.


Odpovědět   i++; | i--;
Aplikace je hotova až tehdy, když z ní nelze nic odebrat.
30.08.2012 13:57:31
Avatar
matesax
Redaktor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Kit:

Přesně to jsem napsal. A oprávnění bude potřeba i když bude jenom do složky s potřebou práv stahovat - a to jsem již napsal - ať to stahuje do uživatelských složek - že se do C, nebo do Program Files nestahuje...


Odpovědět   i++; | i--;
30.08.2012 13:58:33
Avatar
matesax
Redaktor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na Kit:

Nevím, co je špatného na tom, že jsem udělal ProgressBar pro konzoli - najdeš ho snad všude, kde se stahuje...


Odpovědět   i++; | i--;
30.08.2012 14:10:28
Avatar
Kit
Moderátor
Skill: Mainframe
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax:

Progress bar v konzoli sice občas u delších souborů používám, ale pokud ten příkaz na stažení souboru vkládám do nějaké aplikace, tak ho vypínám, aby nerušil. Většinou nepotřebuji průběh sledovat, protože je to hned.

Na takové záležitosti raději používám systémové programy, ve vlastní aplikaci to neřeším. Je to praktičtější, spolehlivější a jednodušší na ovládání. Zápis příkazu je ještě kratší, než tvá minimální verze v C#.


Odpovědět   i++; | i--;
Aplikace je hotova až tehdy, když z ní nelze nic odebrat.
02.10.2012 20:17:25
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Omlouvám se, že otevírám 2 měsíce toto téma, ale co když potřebuji stáhnout více souborů?

Děkuji


Odpovědět   i++; | i--;
02.10.2012 20:29:32
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

Například kolekce a foreach.


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 20:31:44
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Nějaký příklad by nebyl? V C# nedělám zrovna dlouho :(


Odpovědět   i++; | i--;
02.10.2012 20:37:00
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot

Vycházej z mého příspěvku výše: http://www.devbook.cz/…fe4d8d6c9915#…

Soubory, které chceš stáhnou si hodíš například do List

List<string> Urls = new List<string>();
Urls.Add("http://www.devbook.cz/download2.php?file=505b0c67d08e0&name=ISIM_setup.exe");
Urls.Add("http://www.devbook.cz/download2.php?file=5065548f7c5a8&name=MenovaKalkulacka.zip");

foreach (string File in Urls)
{
   webClient.DownloadFileAsync(new Uri(File), @"c\cesta\soubor");
}

Editováno 2.10.2012


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 20:42:07
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Takže to bude vypadat nějak takhle?

private void button1_Click(object sender, EventArgs e)
         {
             WebClient webClient = new WebClient();
             webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
             webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);

             List<string> Urls = new List<string>();
             Urls.Add("http://www.devbook.cz/download2.php?file=505b0c67d08e0&name=ISIM_setup.exe");
             Urls.Add("http://www.devbook.cz/download2.php?file=5065548f7c5a8&name=MenovaKalkulacka.zip");

             foreach (string File in Urls)
             {
                 webClient.DownloadFileAsync(new Uri(File), @"c:\cesta\soubor");
             }
         }

         private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
         {
             progressBar1.Value = e.ProgressPercentage;
         }
         private void Completed(object sender, AsyncCompletedEventArgs e)
         {
             MessageBox.Show("Stahování bylo úspěšně dokončeno");
         }

Editováno 2.10.2012


Odpovědět   i++; | i--;
02.10.2012 20:43:45
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

Jop, to by mělo fungovat.


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 20:45:17
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Díky moc, jen u foreach mi to píše tohle:

No overload for method 'DownloadFileAsync' takes 1 arguments


Odpovědět   i++; | i--;
02.10.2012 20:47:09
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

Jó promiň, ještě výstupní cesta, kam se to má uložit. Editnu to.


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 20:51:47
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

A jméno můžeš zjistit takto:

string headerContentDisposition = webClient.ResponseHeaders["content-disposition"];
string fileName = new ContentDisposition(headerContentDisposition).FileName;

Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 20:59:50
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Takže výsledek bude takhle?
Pokud ano, kam mám teda zadat cestu k uložení?

private void button1_Click(object sender, EventArgs e)
         {
             WebClient webClient = new WebClient();
             webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
             webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);

             List<string> Urls = new List<string>();
             Urls.Add("http://www.devbook.cz/download2.php?file=505b0c67d08e0&name=ISIM_setup.exe");
             Urls.Add("http://www.devbook.cz/download2.php?file=5065548f7c5a8&name=MenovaKalkulacka.zip");

             foreach (string File in Urls)
             {
                 string headerContentDisposition = webClient.ResponseHeaders["content-disposition"];
                 string fileName = new ContentDisposition(headerContentDisposition).FileName;
                 webClient.DownloadFileAsync(new Uri(File), @"c:\cesta\" + fileName);
             }
         }

         private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
         {
             progressBar1.Value = e.ProgressPercentage;
         }
         private void Completed(object sender, AsyncCompletedEventArgs e)
         {
             MessageBox.Show("Stahování bylo úspěšně dokončeno");
         }

Editováno 2.10.2012


Odpovědět   i++; | i--;
02.10.2012 21:04:41
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

Ještě ten řádek s DownloadFile. Editnul jsem ti to. Vyzkoušej, mělo by to fungovat :)


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 21:19:32
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot
Odpovídá na sczdavos:

Pokud použiju tohle:

private void button1_Click(object sender, EventArgs e)
         {
             WebClient webClient = new WebClient();
             webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
             webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);

             List<string> Urls = new List<string>();
             Urls.Add("http://www.devbook.cz/download2.php?file=505b0c67d08e0&name=ISIM_setup.exe");
             Urls.Add("http://www.devbook.cz/download2.php?file=5065548f7c5a8&name=MenovaKalkulacka.zip");

             foreach (string File in Urls)
             {
                 string headerContentDisposition = webClient.ResponseHeaders["content-disposition"];
                 string fileName = new ContentDisposition(headerContentDisposition).FileName;
                 webClient.DownloadFileAsync(new Uri(File), @"C:\Users\Patrik\Desktop" + fileName);
             }
         }

         private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
         {
             progressBar1.Value = e.ProgressPercentage;
         }
         private void Completed(object sender, AsyncCompletedEventArgs e)
         {
             MessageBox.Show("Stahování bylo úspěšně dokončeno");
         }

Tak to napíše:
Odkaz na objekt není nastaven na instanci objektu.
Je to u řádku s:

string headerContentDisposition = webClient.ResponseHeaders["content-disposition"];

Odpovědět   i++; | i--;
02.10.2012 21:28:57
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

No jo, to je fakt. To bys musel použít OpenRead, ale pak bys musel zapisovat data manuálně.

Budeš stahovat soubory z určitého serveru? Že by sis ten název vytvořil podle url adresy?

Nebo ho můžeš zadávat manuálně.


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 21:30:09
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Budu to stahovat z určitého serveru.

Editováno 2.10.2012


Odpovědět   i++; | i--;
02.10.2012 21:31:50
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

A můžeš ukázat příklady adres odkazující na soubory? Jestli se z nich dá nějak vyčíst název.


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 21:38:28
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot
02.10.2012 21:43:35
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

Tak tady by šlo třeba:

string adresa = "http://neco.eu/download/nejakysoubor.zip";
string fileName = adresa.Substring(adresa.LastIndexOf('/') + 1);

Editováno 2.10.2012


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 21:49:31
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Dobře a když je těch souborů více?


Odpovědět   i++; | i--;
02.10.2012 21:52:03
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
List<string> Urls = new List<string>();
Urls.Add("http://neco.eu/download/nejakysoubor.zip");
Urls.Add("http://neco.eu/download/nejakysoubor2.zip");

foreach (string File in Urls)
{
       string FileName = File.Substring(File.LastIndexOf('/') + 1);
       webClient.DownloadFileAsync(new Uri(File), @"C:\Users\Patrik\Desktop\" + FileName);
}

Editováno 2.10.2012


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 21:54:15
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Díky moc, ale teď to píše zase tuto chybu:

'string' does not contain a definition for 'SubString' and no extension method 'SubString' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)

Odpovědět   i++; | i--;
02.10.2012 22:00:38
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

Je to Substring. Ale tak to už sis mohl dohledat ;)


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 22:02:49
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Aha jen změnit na malé písmeno :D, no to mohl :D Díky moc, doufám že už to bude fungovat. Hraju si s tím už skoro týden.


Odpovědět   i++; | i--;
02.10.2012 22:08:22
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot
Odpovídá na sczdavos:

Ach jo, už zase:
Klient WebClient nepodporuje souběžné operace vstupu a výstupu.
U řádku:

webClient.DownloadFileAsync(new Uri(File), @"C:\Users\Patrik\Desktop\" + FileName);

Odpovědět   i++; | i--;
02.10.2012 22:12:10
Avatar
sdraco
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

Sice nevím, proč je File s velkým F, ale Substring nemá to druhé velké S.

EDIT: Ještě k tomu řádku, chyba může být (a tady je) na řádku výše, než ukazuje IDE.

Editováno 2.10.2012


Odpovědět   i++; | i--;
Čtverec, čtverec, čtverec, čtverec.
02.10.2012 22:17:40
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot
Odpovídá na sdraco:

Já tam žádnou chybu nevidím.


Odpovědět   i++; | i--;
02.10.2012 22:19:22
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

Aha. Tak to asi budeš muset počkat na dokončení stahování a v události Completed volat další. Nebo možná zkus použít metodu DownloadFile bez toho Async.

Jinak asi:

private void Completed(object sender, AsyncCompletedEventArgs e)
{
   Urls.RemoveAt(0);
   if (Urls.Count > 0)
   {
      string FileName = Urls[0].Substring(Urls[0].LastIndexOf('/') + 1);
      webClient.DownloadFileAsync(new Uri(Urls[0]), @"C:\Users\Patrik\Desktop\" + FileName);
   }
}

A Urls a webClient si musíš dát jako třídní proměnné. Tzn. mimo metodu, aby byly viditelné i pro ostatní metody. Snad to už bude fungovat. Vařím z vody nikdy jsem přes C# nic nestahoval. Tak mě prosím omluv, že chybuju.


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 22:26:49
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot

Nevadí, každý chybuje, bez toho Async jsme to měli doposud, ale ten program při stahování neodpovídal a různě se zasekával i když soubory stáhl, to je pravda. Proto jsem se doslechl že když přidám Async, tak by to mělo být v pořádku a ten program by měl jet plynule. Mohl bych se tedy zeptat, jak by vypadal výsledný script? Asi jsem ..., že si to neumím udělat, ale takové věci jsem ještě nedělal.
Díky moc


Odpovědět   i++; | i--;
02.10.2012 22:31:59
Avatar
sczdavos
Moderátor
Skill: Kvantový počítač
DotDotDotDotDotDotDotDotDotDot
Odpovídá na PatrikLeifert:

Nějak takto. Ale projdi si základy tady na webu. Nechci to tu za tebe stále psát :)

WebClient webClient = new WebClient();
List<string> Urls = new List<string>();
private void button1_Click(object sender, EventArgs e)
{
       webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
       webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);

       Urls.Add("http://neco.eu/download/nejakysoubor.zip");
       Urls.Add("http://neco.eu/download/nejakysoubor2.zip");

       DownloadFile(Urls[0]);
}

private void DownloadFile(string Url)
{
       string FileName = Url.Substring(Url.LastIndexOf('/') + 1);
       webClient.DownloadFileAsync(new Uri(Url), @"C:\Users\Patrik\Desktop\" + FileName);
}

private void Completed(object sender, AsyncCompletedEventArgs e)
{
   Urls.RemoveAt(0);
   if (Urls.Count > 0)
   {
      DownloadFile(Urls[0]);
   }
}

Editováno 2.10.2012


Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
02.10.2012 22:44:19
Avatar
PatrikLeifert
Člen
Skill: Vědecká kalkulačka
DotDotDotDotDotDotDotDotDotDot
Odpovídá na sczdavos:

Ještě jednou díky moc, už to funguje.


Odpovědět   i++; | i--;

 

Zobrazeno 69 z 69 zpráv


Přidat novou zprávu

Avatar
Neregistrovaný

Pro výhody se přihlaš. Pokud ještě nemáš účet, zaregistruj se.

Jméno:
E-mail:
Web:

Šťastný Smutný S vyplazeným jazykem Mrkající Smějící se Plačící Cool Nemocný Naštvaný S brýlemi Stydící se On to nebyl Překvapený Hodně překvapený Šokovaný Srdce sdraco
Vložení obrázků Obrázky mohou nahrávat pouze registrovaní uživatelé
Vložení dlouhého zdrojáku Pouze pro registrované

 

Pro ověření prosím zaškrtněte pravdivá tvrzení:
Registrovaní uživatelé se tímto zdržovat nemusí. Zaregistrovat se

Nehodlám dodržovat pravidla
Jsem robot
Nejsem robot
Chci porušovat pravidla