IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Ftp výpis súborov zo zložky v C # .NET

V tomto článku si postupne prejdeme manipulácia so súbormi skrze FTP server. Ukážeme si ako získať zoznam súborov zo zložky, nahranie súboru a tiež prevzatie súboru.

Ce je to FTP?

Než začneme, tak by nebolo úplne od veci si tu trochu popísať čo to vlastne FTP znamená.

FTP (anglicky File Transfer Protocol) je v informatike protokol pre prenos súborov medzi počítačmi pomocou počítačovej siete. Využíva protokol TCP z rodiny TCP / IP a môže byť používaný nezávisle na použitom operačnom systéme (je platforme nezávislý).

Príklad: Vaša firma usporiadala konferenciu a tú ste celú natáčali. Teraz ale nastáva problém, že sa na záznam tejto konferencie chce niekto na vzdialenom mieste pozrieť, napríklad v Amerike. Je niekoľko možností, ako mu túto nahrávku doručiť:

  • Poštou: toto riešenie je zdĺhavé a keď treba takýto video záznam (napríklad na CD alebo DVD) budete posielať desiatkam alebo stovkám ľudí, tak by to bolo neekonomické.
  • E-mailom: tu nastáva riziko, že nahrávka bude moc veľká => väčšia ako maximálna možná veľkosť prílohy, tak sa odoslanie nepodarí.
  • Nahrať súbor na internet a ostatní si ho potom stiahnu - k tomuto práve slúži FTP.

Pre dnešný príklad si pripravte nejaký FTP účet, s ktorým budeme pracovať. FTP priestor vám poskytne webhosting a ako ho získať je vysvetlené napr. V lekcii Nahrávanie webu na internet.

Užívateľské rozhranie

Aplikácia bude z pohľadu používateľského rozhrania veľmi strohá, pretože v tomto dieli sa zameriame skôr na kód.

Vytvoríme si novú Windows Form aplikáciu az toolbox si pridáme listbox. Príklad viď. obrázok nižšie.

formulár aplikácie - Súbory v C# .NET

Príprava udalosti

Miesto, kde budeme vykonávať hlavnej sekcii kódu, si teraz pripravíme. K našej udalosti sa dostaneme, keď v sekcii Properties (vlastnosti) klikneme na záložku Events (udalosti) a tu už vidíme všetky možné udalosti. Využijeme udalosť Load hlavného formulára. Stačí 2x kliknúť do vedľajšieho voľného poľa a udalosť sa vám sama vytvorí a prepne vás to do kódu. Príklad viď. obrázok nižšie.

udalosť load - Súbory v C# .NET

Menné priestory

Pri našom kódovanie budeme potrebovať pridať dva menné priestory a to konkrétne:

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

Menné priestory možno samozrejme automaticky vygenerovať počas kódovania, takže ak tento krok preskočíte, nič závažné sa nestane. Ďalej pri programovaní ak vám u FtpWebRequest, FtpWebResponse, NetworkCredentials, Stream a alebo StreamReader vyskočí error, tak stačí len nabehnúť na určitú triedu, následne sa vám objaví ikonka a keď na ňu kliknete už sa vám ukáže možnosť pridať nový using.

Kód

Uri

Ako prvý krok si vytvoríme novú inštanciu triedy Uri, do ktorej cez konštruktor uvedieme adresu nášho FTP servera až po koncovú zložku, z ktorej chceme získať výpis súborov. Pozor, tu sa nedá používať trieda Path.

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

FtpWebRequest

FtpWebRequest implementuje File Transfer Protocol (FTP) client. My si vytvoríme FtpWebRequest s metódou Create, ktorá berie do konstruktoru Uri. Tým sme si vytvorili požiadavku na FTP server, ktorého adresu sme určili skrze Uri.

Ďalej nášmu FtpWebRequestu musíme nastaviť 2 ďalšie veci. Ako prvý musíme nastaviť vlastnosť Credentials. To znamená prístupové údaje k nášmu FTP serveru. Tieto údaje vložíme do Credentials skrze triedu NetworkCredential, kde zadáme do konstruktoru dve string hodnoty (prihlasovacie meno, heslo).

Teraz, keď máme nastavený prístup do FTP, zostáva len určiť metódu, čiže úkon, ktorý bude náš FtpWebRequest vykonávať. Vlastnosť Method sa nastaví za pomocou triedy WebRequestMethods, kde zvolíme triedu Ftp a ďalej už vidíme výpis úkonov pre Ftp, takže zvolíme ListDirectory. ListDirectory získa výpis všetkých súborov zo zložky, ktorú sme zadali v našej ceste.

WebRequestMet­hods.Ftp

Základné typy metód protokolu Ftp. Je ich trochu viac, ale pre naše tutoriály bohato postačí všetky nižšie vypísané.

  • 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 samozrejme nahraďte svojím menom a heslom, ktoré ste dostali od poskytovateľa webhostingu. Rovnako si upravte aj FTP adresu vášho priestoru.

FtpWebResponse

Tu budeme postupovať podobne ako pri FtpWebRequest. Vytvoríme si nový FtpWebResponse, ale pri vytváraní použijeme náš FtpWebRequest a zvolíme metódu GetResponse. Týmto získame od FTP servera odpoveď a prakticky dostaneme výpis súborov v danej zložke.

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

Čítanie výpisu a jeho zapísanie do komponenty

Teraz keď som z FTP servera získali výpis súborov, tak ten výpis musíme nejakým spôsobom prečítať a zapísať do našej komponenty.

Na čítanie výpisu použijeme triedu Stream a StreamReader. Vytvoríme si nový Stream a využijeme metódy GetResponseStream, ktorou disponuje naša odpoveď od FTP servera publicResponse. Teraz vytvoríme novú inštanciu triedy StreamReader a do konstruktoru musíme zadať Stream, takže zadáme náš vytvorený publicStream.

Vďaka StreamReaderu sme teraz schopní čítať dáta z nášho výpisu, takže prejdeme k následnému zapísanie výpisu do našej komponenty.

Využijeme cyklus while a ako podmienku si zadáme kým publicStreamReader nedôjde na koniec streamu (záznamu), tak bude opakovať nasledujúcich akcií: Pridať novú položku do našej komponenty listbox, ako položku budeme užívať publicStreamRe­ader.ReadLine (). Metóda ReadLine nám vráti string s názvom súboru v existujúcom riadku. Takto budeme čítať riadok po riadku, kým nenarazíme na koniec záznamu a vtedy už neplatia naše podmienka cyklu a program postupuje ďalej.

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

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

My sme týmto získali výpis všetkých súborov v priečinku na FTP serveri. Ja len dúfam, že sa vám tutoriál páčil a teším sa nabudúce u ďalšieho dielu.


 

Všetky články v sekcii
Súbory v C# .NET
Článok pre vás napísal Jakub Lásko[Saarix]
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Věnuji se programování v C#, MonoGame a Unity.
Aktivity