Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akce až 50 % zdarma při nákupu e-learningu. Více informací:
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í.

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:

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

Událost load

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ří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, 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().


 

Předchozí článek
TCP připojení v C# .NET
Všechny články v sekci
Síť v C# .NET
Přeskočit článek
(nedoporučujeme)
Nahrání/stažení souboru z FTP v C# .NET
Článek pro vás napsal Jakub Lásko[Saarix]
Avatar
Uživatelské hodnocení:
6 hlasů
Věnuji se programování v C#, MonoGame a Unity.
Aktivity