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

Avatar
ajnstajnke
Člen
Avatar
ajnstajnke:

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
 
Nahoru Odpovědět 24.7.2013 20:48
Avatar
ajnstajnke
Člen
Avatar
Odpovídá na Jan Vargovský
ajnstajnke:

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ý:

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):

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:

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 asertivni_0
Luboš Běhounek (Satik):

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š Běhounek (Satik)
Kit:

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:

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:

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):

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.