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

C# .NET .NET (C# a Visual Basic) problém s kompletním načtením American English version English version

Aktivity (1)
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ý
Redaktor
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ý
Redaktor
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
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na ajnstajnke
Luboš Satik Běhounek: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
:)
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
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na asertivni_0
Luboš Satik Běhounek:25.7.2013 14:34

co? :)
myslis

void fce()
{
...
}

ze je na nic nebo co? :)

Nahoru Odpovědět 25.7.2013 14:34
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Satik Běhounek
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š Satik Běhounek
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
Redaktor
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
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na Kit
Luboš Satik Běhounek: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  +1 25.7.2013 14:51
:)
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.