Lekce 5 - FTP výpis souborů ze složky v C# .NET
V minulé lekci, TCP připojení v C# .NET, jsme si popsali TCP připojení v jazyce C# .NET. Vytvořili jsme jednoduchý server a klienta. Úspěšně jsme odeslali zprávu.
V dnešním Windows Forms tutoriálu si ukážeme využití streamu k vypsání souborů ze složky na FTP serveru do komponenty ListBox. Probereme si získání seznamu souborů ze složky, nahrání souboru a také stažení souboru.
Co je to FTP?
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í
Vytvoříme si novou Windows Form aplikaci a z toolboxu si
přidáme ListBox
.
Příklad viz. obrázek:

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). 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 nám sama vytvoří a přepne nás to do kódu.
Příklad viz. obrázek:

Jmenné prostory
Při našem kódování budeme potřebovat přidat dva jmenné prostory:
using System.IO;
,using System.Net;
.
Jmenné prostory lze samozřejmě automaticky vygenerovat během kódování.
Pokud nám u FtpWebRequest
, FtpWebResponse
,
NetworkCredentials
, Stream
a StreamReader
vyskočí chybová hláška, najedeme na určitou třídu a následně klikneme
na ikonku, pomocí které se nám přidá nový jmenný prostor.
Kód
Psaní kódu si rozdělíme do menších celků.
Třída Uri
Jako první krok si vytvoříme novou instanci třídy Uri
. Do
konstruktoru třídy Uri
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 typu string
vypadá následovně:
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 FtpWebRequest
musíme nastavit:
- vlastnost
Credentials
, - přístupové údaje k našemu FTP serveru. Tyto údaje vložíme do
vlastnosti
Credentials
skrze tříduNetworkCredential
, 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,
která bude náš FtpWebRequest
provádět. Vlastnost
Method
se nastaví za pomocí třídy
WebRequestMethods
, kde zvolíme třídu Ftp
. Dále
již vidíme výpis úkonů pro Ftp
, zvolíme
ListDirectory
. ListDirectory
získá výpis všech
souborů ze složky, kterou jsme zadali v naší cestě.
WebRequestMethods.Ftp
Mezi základní typy metod protokolu Ftp
patří:
DeleteFile()
,DownloadFile()
,UploadFile()
,RemoveDirectory()
,MakeDirectory()
,ListDirectory()
.
Kód je následující:
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 v ní 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
. Nyní vytvoříme novou instanci třídy
StreamReader
, do jejíž konstruktoru zadáme Stream
.
Náš Stream
bude náš vytvořený publicStream
.
Díky StreamReader
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.
Do podmínky cyklu while
vložíme procházení datového proudu
Stream
dokud publicStreamReader.EndOfStream
bude
false
. Do těla cyklu vložíme přidání přečtených
souborů:
Stream publicStream = publicResponse.GetResponseStream(); StreamReader publicStreamReader = new StreamReader(publicStream); while (!publicStreamReader.EndOfStream) { lsbSeznamSouboru.Items.Add(publicStreamReader.ReadLine()); }
Takto jsme získali výpis všech souborů ve složce na FTP serveru.
V příští lekci, Nahrání/stažení souboru z FTP v C# .NET, si ukážeme nahrání a stažení souboru z FTP
serveru v C# .NET pomocí třídy WebClient
a metod
UploadFile()
a DownloadFile()
.