Letní akce PHP týden
Pouze tento týden sleva až 80 % na kurzy PHP. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!

FTP výpis souborů ze složky v C# .NET

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V tomto článku si postupně projdeme manipulace se soubory skrze FTP server. Ukážeme si jak získat seznam souborů ze složky, nahrání souboru a také stažení souboru.

Ce je to FTP?

Než začneme, tak by nebylo úplně od věci si zde trochu popsat co to vlastně FTP znamená.

FTP (anglicky File Transfer Protocol) je v informatice protokol pro přenos souborů mezi počítači pomocí počítačové sítě. Využívá protokol TCP z rodiny TCP/IP a může být používán nezávisle na použitém operačním systému (je platformě nezávislý).

Příklad: Vaše firma uspořádala konferenci a tu jste celou natáčeli. Teď ale nastává problém, že se na záznam této konference chce někdo na vzdáleném místě podívat, třeba v Americe. Je několik možností, jak mu tuto nahrávku doručit:

  • Poštou: toto řešení je zdlouhavé a když třeba takovýto video záznam (třeba na CD nebo DVD) budete posílat desítkám nebo stovkám lidí, tak by to bylo neekonomické.
  • E-mailem: tady nastává riziko, že nahrávka bude moc velká => větší než maximální možná velikost přílohy, tak se odeslání nepodaří.
  • Nahrát soubor na internet a ostatní si ho potom stáhnou – k tomuto právě slouží FTP.

Pro dnešní příklad si připravte nějaký FTP účet, se kterým budeme pracovat. FTP prostor vám poskytne webhosting a jak jej získat je vysvětleno např. v lekci Nahrání webu na internet.

Uživatelské rozhraní

Aplikace bude z pohledu uživatelského rozhraní velice strohá, protože v tomto dílu se zaměříme spíše na kód.

Vytvoříme si novou Windows Form aplikaci a z toolboxu si přidáme ListBox. Příklad viz. obrázek níže.

Formulář aplikace

Příprava události

Místo, kde budeme provádět hlavní sekci kódu, si nyní připravíme. K naší události se dostaneme, když v sekci Properties (vlastnosti) klikneme na záložku Events (události) a zde již vidíme všechny možné události. Využijeme událost Load hlavního formuláře. Stačí 2x kliknout do vedlejšího volného pole a událost se vám sama vytvoří a přepne vás to do kódu. Příklad viz. obrázek níže.

Událost load

Jmenné prostory

Při našem kódování budeme potřebovat přidat dva jmenné prostory a to konkrétně:

  • using System.IO;
  • using System.Net;

Jmenné prostory lze samozřejmě automaticky vygenerovat během kódování, takže pokud tento krok přeskočíte, nic závažného se nestane. Dále při programování pokud vám u FtpWebRequest, FtpWebResponse, NetworkCredentials, Stream a nebo StreamReader vyskočí error, tak stačí pouze najet na určitou třídu, následně se vám objeví ikonka a pokud na ni kliknete již se vám ukáže možnost přidat nový using.

Kód

Uri

Jako první krok si vytvoříme novou instanci třídy Uri, do které přes konstruktor uvedeme adresu našeho FTP serveru až po koncovou složku, ze které chceme získat výpis souborů. Pozor, zde se nedá používat třída Path.

  • Konstruktor je typu string
Uri publicUri = new Uri(@"ftp://[email protected]/EnglishWords/Public/");

FtpWebRequest

FtpWebRequest implementuje File Transfer Protocol (FTP) client. My jsi vytvoříme FtpWebRequest s metodou Create, která bere v konstruktoru Uri. Tím jsme si vytvořili požadavek na FTP server, jehož adresu jsme určili skrze Uri.

Dále našemu FtpWebRequestu musíme nastavit 2 další věci. Jako první musíme nastavit vlastnost Credentials. To znamená přístupové údaje k našemu FTP serveru. Tyto údaje vložíme do Credentials skrze třídu NetworkCredential, kde zadáme do konstruktoru dvě string hodnoty (přihlašovací jméno, heslo).

Nyní, když máme nastavený přístup do FTP, zbývá jen určit metodu, čili úkon, který bude náš FtpWebRequest provádět. Vlastnost Method se nastaví za pomocí třídy WebRequestMethods, kde zvolíme třídu Ftp a dále již vidíme výpis úkonů pro Ftp, takže zvolíme ListDirectory. ListDirectory získá výpis všech souborů ze složky, kterou jsme zadali v naší cestě.

WebRequestMet­hods.Ftp

Základní typy metod protokolu Ftp. Je jich trochu více, ale pro naše tutoriály bohatě postačí všechny níže vypsané.

  • DeleteFile
  • DownloadFile
  • UploadFile
  • RemoveDirectory
  • MakeDirectory
  • ListDirectory
FtpWebRequest publicFtp = (FtpWebRequest)FtpWebRequest.Create(publicUri);
publicFtp.Credentials = new NetworkCredential("ucet", "heslo");
publicFtp.Method = WebRequestMethods.Ftp.ListDirectory;

Údaje si samozřejmě nahraďte svým jménem a heslem, které jste dostali od poskytovatele webhostingu. Stejně si upravte i FTP adresu vašeho prostoru.

FtpWebResponse

Zde budeme postupovat podobně jako u FtpWebRequest. Vytvoříme si nový FtpWebResponse, ale při vytváření použijeme náš FtpWebRequest a zvolíme metodu GetResponse. Tímto získáme od FTP serveru odpověď a prakticky dostaneme výpis souborů v dané složce.

FtpWebResponse publicResponse = (FtpWebResponse)publicFtp.GetResponse();

Čtení výpisu a jeho zapsání do komponenty

Nyní když jsem z FTP serveru získali výpis souborů, tak ten výpis musíme nějakým způsobem přečíst a zapsat do naší komponenty.

Ke čtení výpisu použijeme třídu Stream a StreamReader. Vytvoříme si nový Stream a využijeme metody GetResponseStream, kterou disponuje naše odpověď od FTP serveru publicResponse. Teď vytvoříme novou instanci třídy StreamReader a do konstruktoru musíme zadat Stream, takže zadáme náš vytvořený publicStream.

Díky StreamReaderu jsme nyní schopni číst data z našeho výpisu, takže přejdeme k následnému zapsání výpisu do naší komponenty.

Využijeme cyklus while a jako podmínku si zadáme dokud publicStreamReader nedojde na konec streamu (záznamu), tak bude opakovat následujicí akci: Přidat novou položku do naší komponenty ListBox, jako položku budeme užívat publicStreamRe­ader.ReadLine(). Metoda ReadLine nám vrátí string s názvem souboru ve stávajícím řádku. Takto budeme číst řádek po řádku, dokud nenarazíme na konec záznamu a tehdy již neplatí naše podmínka cyklu a program postupuje dál.

Stream publicStream = publicResponse.GetResponseStream();
StreamReader publicStreamReader = new StreamReader(publicStream);

while (!publicStreamReader.EndOfStream)
{
    lsbSeznamSouboru.Items.Add(publicStreamReader.ReadLine());
}

My jsme tímto získali výpis všech souborů ve složce na FTP serveru. Já jen doufám, že se vám tutoriál líbil a těším se příště u dalšího dílu.


 

 

Aktivity (3)

 

 

Komentáře
Zobrazit starší komentáře (14)

Avatar
Patrik Pastor:12. května 1:13

Mam dojem ale ze to neni, ze bych nekde udelal chybu v kodu, spis ze server asi uz neni funkci nebo neexistuje (podle toho ze clanek je 6 let stary), takze jak najdu alternativni server, odkud bych si list souboru mohl pres FTP dostat a nasledne je ulozit do listBoxu? Jak hledat ftp servery?

 
Odpovědět 12. května 1:13
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Patrik Pastor
vajkuba1234:12. května 2:40

To FTP musis mit ty, pripadne na nejakem hostingu a logicky k nemu i pristupove udaje...

Odpovědět  +2 12. května 2:40
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Odpovídá na vajkuba1234
Patrik Pastor:15. května 16:39

Nastesti mi kamarad poradil a vytvoril jsem si ho (z nejake zdarma hostingove firmy, tedy i hosting), ale kdybych ho nemel? ani by mi nikdo neporadil? Kde je tu nekde napsane za ftp potrebuji ja, a ne - nemam to vedet, protoze jedu po lekcich v C# a nikde nebyle dosud ani zminka o ftp. Takze se ptam jakou uroven potom clanek ma, kdyz nerekne takhe zasadni veci

 
Odpovědět  -1 15. května 16:39
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Patrik Pastor
David Čápka:15. května 17:01

ani by mi nikdo neporadil

Kde ti nikdo neporadil? Dostal jsi zadarmo promptní podporu v komentářích. Dále tu máš frekventované diskuzní fórum, kde se můžeš kdykoli na cokoli zeptat. Návod na FTP jsem do článku doplnil.

Odpovědět  +1 15. května 17:01
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Patrik Pastor:15. května 17:03

mozna az ted, ok, ale v dobe kdy jsem to potreboval (cteni clanku, tj. 4 dny zpatky) mi proste aplikace nefungovala, a to i pres to, ze jsem to prachsproste zkopiroval metody odsud (chronologicky podle obsahu). Nakonec jsem musel dat jine ftp, svoje, a to uz fungovalo

 
Odpovědět 15. května 17:03
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Patrik Pastor
David Čápka:15. května 17:07

Jak až teď? Odpověděl ti do 2 hodin. Že ti aplikace nefungovala je naprosto logické, když jsi tam nezadal své připojovací údaje :-` Své FTP tam přeci autor nevystaví, to je jako bys dal někomu platební kartu, aby se s ní naučil platit.

Editováno 15. května 17:07
Odpovědět  +1 15. května 17:07
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Patrik Pastor:15. května 17:10

A jsem u toho, kde je vlastne neco napsane o ftp? Ja jsem to treba ani nevedel ze ftp "je jako nekomu dat platebni kartu". Ano, jak bych to asi vedel mel kdyz se v tomto clanku setkavam s FTP poprve? Proste jsem jen pokracoval, nevim jak to fungovalo. Takze to je o cem mluvim, kdyz rikam, ze nekdy clankum chybi vyvsvetlenoli

 
Odpovědět 15. května 17:10
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Patrik Pastor
David Čápka:15. května 17:13

To máš pravdu, pro nás je tohle hodnotný feedback a do článku jsem to přidal, můžeš se podívat, jsou tam 2 žluté boxíky. Jen říkám, že se tu můžeš vždy zeptat v komentářích nebo ve fóru, člověka co to píše obvykle nenapadne všechno, co může napadnout lidi, co to čtou a není se tomu potřeba tak moc divit.

Odpovědět 15. května 17:13
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Patrik Pastor:15. května 17:15

ok v poho, uz vsemu rozumim. Jenom me to predtim zaskocilo ze mi to vlastne vubec nefungovalo, ikdyz jsem vse mel podle clanku, zjistil jsem, spravil, v poradku. Na forum jsem jeste tady nebyl, hodne veci hledam pres stackoverflow nebo pres zname, tak se tady podivam, jak to tu vypada

 
Odpovědět 15. května 17:15
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Patrik Pastor
vajkuba1234:15. května 17:31

Musis u toho i trochu premyslet, pripadne se zeptej jako clovek a ne, ze tady hned budes brecet a plivat okolo sebe. Priste se na tebe kazdy akorat vykašle.

Editováno 15. května 21:31
Odpovědět  ±0 15. května 17:31
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
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 10 zpráv z 24. Zobrazit vše