IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: problém s kompletním načtením

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
ajnstajnke
Člen
Avatar
ajnstajnke:24.7.2013 20:43

Nevíte prosím proč se mi přes FTP nepodaří načíst celý soubor až do konce prostě načte většinu, ale ke konci se data ztratí např. když stáhnu soubor normálně tak má 33344 a když ho stahuju přes FTP tak má jen 27839. Prostě ty data nestáhne všechny.

private FtpWebRequest ftpRequest = null;
        private FtpWebResponse ftpResponse = null;
        private Stream ftpStream = null;
        private int bufferSize = 524288;

        public void download()
        {
            p.Clear();
            TabulkaHodnot.Rows.Clear();
            try
            {
                int h = 60000;
                int a = 0;
                while (h <= 60000)
                {
                    ftpRequest = (FtpWebRequest)FtpWebRequest.Create("ftp://" + textBox12.Text + "/" + 60002);
                    ftpRequest.Credentials = new NetworkCredential(textBox13.Text, textBox14.Text);

                    ftpRequest.UseBinary = true;
                    ftpRequest.UsePassive = false;
                    ftpRequest.KeepAlive = true;

                    ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
                    ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
                    ftpStream = ftpResponse.GetResponseStream();

                    a++;
                    Thread.Sleep(10000);
                    progressBar1.Value= a;

                    byte[] byteBuffer = new byte[bufferSize];
                    int bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
                    BinaryReader br = new BinaryReader(new MemoryStream(byteBuffer));
                    cteni_data(br);

                    ftpStream.Close();
                    ftpResponse.Close();
                    ftpRequest = null;
                    h++;
                    }
                }

            catch (Exception)
            {
                MessageBox.Show("Jsi na konci souborů nebo se připojení k FTP nezdařilo: Prověř připojení!");
            }
            ftpStream.Close();
            ftpResponse.Close();
            ftpRequest = null;
            p.Clear();
            return;
        }

zde ukázka kódu který to nekde ztrácí

 
Odpovědět
24.7.2013 20:43
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:24.7.2013 20:48

Zkus stáhnout jeden s pomocí http://msdn.microsoft.com/…s229711.aspx.

 
Nahoru Odpovědět
24.7.2013 20:48
Avatar
ajnstajnke
Člen
Avatar
Odpovídá na Jan Vargovský
ajnstajnke:25.7.2013 10:27

bohužel to je totéž. Ale vážně tomu nerozumím, proč to takhle dělá. nejhorší je, že nezáleží na délce soubooru prostě to usekne jak z toho velkého 300kB tak i z toho 50kB.

 
Nahoru Odpovědět
25.7.2013 10:27
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na ajnstajnke
Jan Vargovský:25.7.2013 13:25

Zkus se podívat na nějaký funkční jednoduchý FTP klient v C#. To co ti radím jsou jen odkazy z googlu, tak to můžeš hledat i sám. Každopádně zkus to stáhnout odněkud jinud, popřípadě přenést applikaci na jinačí PC.

 
Nahoru Odpovědět
25.7.2013 13:25
Avatar
Odpovídá na ajnstajnke
Luboš Běhounek Satik:25.7.2013 14:26

A vyhodi to nejakou chybu nebo to proste tise vic znaku uz nenacte?
Ja s ftp v c# nikdy problem nemel. A kdyz se tam priupojis pres nejaky jiny ftp klient (pruzkumnik, tc, ...), tak to funguje a stahne cele?

Editováno 25.7.2013 14:26
Nahoru Odpovědět
25.7.2013 14:26
https://www.facebook.com/peasantsandcastles/
Avatar
asertivni_0
Neregistrovaný
Avatar
asertivni_0:25.7.2013 14:29

jenom taková poznámka k metodě, metoda která nic nevrací a nepříjímá žádný data(param) je na nic!

 
Nahoru Odpovědět
25.7.2013 14:29
Avatar
Odpovídá na
Luboš Běhounek Satik:25.7.2013 14:34

co? :)
myslis

void fce()
{
...
}

ze je na nic nebo co? :)

Nahoru Odpovědět
25.7.2013 14:34
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:25.7.2013 14:39

Však ta tvoje funkce nic nedělá, jenom zdržuje. Takže je nanic. Možná kdyby ty tři tečky něco dělaly, tak by na něco mohla být.

Nahoru Odpovědět
25.7.2013 14:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
ajnstajnke
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
ajnstajnke:25.7.2013 14:43

Právě že to žádnou chybu nevyhodí prostě to jenom načte o pár hodnot míň. Jinak když to stáhnu v Total Comanderu, tak to pak tím programem (který může načítat data i ze souboru) načte v pohodě celé.

Editováno 25.7.2013 14:44
 
Nahoru Odpovědět
25.7.2013 14:43
Avatar
Kit
Tvůrce
Avatar
Odpovídá na ajnstajnke
Kit:25.7.2013 14:48

Nestahuješ náhodou binární data v textovém režimu? V těchto situacích je to typické chování.

EDIT: Aha, už to vidím

ftpRequest.UseBinary = true;

Tak nic.

Editováno 25.7.2013 14:50
Nahoru Odpovědět
25.7.2013 14:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:25.7.2013 14:51

Ty tři tečky byly zástupné pro nějakou akci, to si předpokládám každý domyslel :)

Nahoru Odpovědět
25.7.2013 14:51
https://www.facebook.com/peasantsandcastles/
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 11 zpráv z 11.