NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na RainbowShaggy
David Jančík:2.10.2012 21:04

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

Odpovědět
2.10.2012 21:04
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Odpovídá na David Jančík
RainbowShaggy:2.10.2012 21:19

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.itnetwork.cz/download2.php?file=505b0c67d08e0&name=ISIM_setup.exe");
            Urls.Add("http://www.itnetwork.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"];
 
Nahoru Odpovědět
2.10.2012 21:19
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na RainbowShaggy
David Jančík:2.10.2012 21:28

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ě.

Nahoru Odpovědět
2.10.2012 21:28
Zapomeň, že je to nemožné a udělej to ;)
Avatar
RainbowShaggy:2.10.2012 21:30

Budu to stahovat z určitého serveru.

Editováno 2.10.2012 21:30
 
Nahoru Odpovědět
2.10.2012 21:30
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na RainbowShaggy
David Jančík:2.10.2012 21:31

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

Nahoru Odpovědět
2.10.2012 21:31
Zapomeň, že je to nemožné a udělej to ;)
Avatar
RainbowShaggy:2.10.2012 21:38

Př. adresy: http://neco.eu/…kysoubor.zip

 
Nahoru Odpovědět
2.10.2012 21:38
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na RainbowShaggy
David Jančík:2.10.2012 21:43

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 22:24
Nahoru Odpovědět
2.10.2012 21:43
Zapomeň, že je to nemožné a udělej to ;)
Avatar
RainbowShaggy:2.10.2012 21:49

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

 
Nahoru Odpovědět
2.10.2012 21:49
Avatar
David Jančík
Vlastník
Avatar
David Jančík:2.10.2012 21:52
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 21:59
Nahoru Odpovědět
2.10.2012 21:52
Zapomeň, že je to nemožné a udělej to ;)
Avatar
RainbowShaggy:2.10.2012 21:54

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?)
 
Nahoru Odpovědět
2.10.2012 21:54
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na RainbowShaggy
David Jančík:2.10.2012 22:00

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

Nahoru Odpovědět
2.10.2012 22:00
Zapomeň, že je to nemožné a udělej to ;)
Avatar
RainbowShaggy:2.10.2012 22:02

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.

 
Nahoru Odpovědět
2.10.2012 22:02
Avatar
Odpovídá na David Jančík
RainbowShaggy:2.10.2012 22:08

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);
 
Nahoru Odpovědět
2.10.2012 22:08
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na RainbowShaggy
David Hartinger:2.10.2012 22:12

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 22:13
Nahoru Odpovědět
2.10.2012 22:12
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
RainbowShaggy:2.10.2012 22:17

Já tam žádnou chybu nevidím.

 
Nahoru Odpovědět
2.10.2012 22:17
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na RainbowShaggy
David Jančík:2.10.2012 22:19

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.

Nahoru Odpovědět
2.10.2012 22:19
Zapomeň, že je to nemožné a udělej to ;)
Avatar
RainbowShaggy:2.10.2012 22:26

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

 
Nahoru Odpovědět
2.10.2012 22:26
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na RainbowShaggy
David Jančík:2.10.2012 22:31

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 22:41
Nahoru Odpovědět
2.10.2012 22:31
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Odpovídá na David Jančík
RainbowShaggy:2.10.2012 22:44

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

 
Nahoru Odpovědět
2.10.2012 22:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 19 zpráv z 69.