Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. 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í.

Práce s vlastními soubory v C# 1 - Zip archiv

Vítám vás u prvního dílu seriálu o tvorbě souborů vlastního typu. Nyní již umíte pracovat se spoustou druhů souborů, umíte je ukládat a otevírat, stahovat, odesílat, …. Představte si ovšem reálnou aplikaci k evidenci zaměstnanců. Zaměstnanec bude mít textové údaje (jméno, příjmení a email), datum (datum narozeni), číslo (telefonní číslo) a obrázek (fotku). Už jen kvůli obrázku může být na první pohled problém všechna tato data uložit a to ideálně do jednoho jediného souboru. Teoreticky bychom mohli zvolit nějaký binární formát dat (kvůli obrázku) a vložit do něj i textové údaje. Prakticky jsou binární soubory poměrně nešikovné a špatně se s nimi reaguje na změny formátu.

Zip

Podobné aplikace často využívají k ukládání dat archivy. Vezměte si takový MS-Word a jeho dokumenty s příponou souborů docx. Když změníte příponu libovolného docx souboru na .zip, zjistíte, že dokument je ve skutečnosti archiv zip, pouze s jinou příponou. Zkuste si to.

Pozn.: Windows skrývají ve výchozím nastavení přípony souborů známých typů, takže místo Dokument.docx vidíte jen Dokument. Nastavení změníte v Ovládacích panelech -> Zobrazit podle: Ikony -> Možnosti složky -> Zrušit zatržítko Skrýt přípony známých typů.

Jako archiv v sobě může soubor obsahovat jednoduše několik souborů a navenek se tváří pro nic netušícího uživatele jako jeden. Přesně archivu zip využijeme i k uložení našeho zaměstnance. A místo .zip nastavíme souboru úplně jinou příponu, nabízí ze .zamestnanec nebo pokud se chcete držet třípísmenných tak jen .zam.

Přípona souboru totiž slouží jen k tomu, aby operační systém Windows zjistil v jaké aplikaci má soubor otevřít, když na něj uživatel poklepe. Většinou platí, že má každý soubor na konci svého názvu tečku a 3-písmennou příponu. Ve skutečnosti nemusí mít soubor příponu vůbec žádnou, může jich mít více, mohou být delší než 3 znaky a dokonce nemusí vůbec odpovídat tomu, co je v souboru uložené. My budeme soubor .zip maskovat jako soubor .zamestnanec. Zip neponecháme z toho důvodu, aby to uživatele nezmátlo a nezačal soubory rozbalovat a měnit.

Formát souborů .zamestnanec

Struktura zazipované složky by mohla být následující:

  • Tomáš_Šeldoskle­pa.zamestnanec
    • info.xml
    • foto.jpg

Soubor Info.xml by mohl vypadat následovně:

<zamestnanci>
    <zamestnanec>
        <jmeno>Tomáš</jmeno>
        <prijmeni>Šeldosklepa</prijmeni>
        <email>[email protected]</email>
        <telefon>123456789</telefon>
        <narozeni>1.1.1970</narozeni>
    </zamestnane>
</zamestnanci>

Element zamestnanci obalující zamestnance je zde proto, že aplikace může někdy v budoucnu zpracovávat více zaměstnanců. Nad takovými "drobnostmi" je potřeba při návrhu přemýšlet.

Tvorba aplikace Zamestnanec

Vytvořte si nový projekt, formulářovou aplikaci.

Rozložení ovládacích prvků - Soubory v C# .NET

Aplikace bude obsahovat následující formulářové prvky:

Název Typ
btnNacist Button
btnVybratFoto Button
btnUlozit Button
txtJmeno TextBox
txtPrijmeni TextBox
txtEmail TextBox
dtpNarozeni DateTimePicker
pcbFoto PictureBox

K prvkům si můžete dát popisky.

Výběr obrázku

Poklepeme na tlačítko vyber obrázek (na předchozím znázornění je toto tlačítko symbolizováno … u obrázku). Vytvoří se obsluha události Click.

V obsluze vytvoříme nový OpenFileDialog. Jako filtr přípon mu nastavíme přípony JPG, PNG a BMP. Filtr se píše tak, že nejprve napíšete popisek, který se zobrazí v dialogu. Oddělíte pomocí | (pravý Alt + W) a napíšete *.pripona a pak oddělíte zase pomocí | a zapisujete další podporovanou příponu. Výsledek je celkem nepřehledný, ale co naděláme, pro náš případ nám postačí:

Fotka JPG (*.jpg)|*.jpg|Fotka PNG (*.png)|*.png|Fotka BMP (*.bmp)|*.bmp

Dialog otevřeme a porovnáme jeho návratovou hodnotu. Pokud bude OK, uživatel vybral obrázek. Pokud bude cokoliv jiného, uživatel buď vybral nesmysl nebo okno stornoval. Jakmile uživatel vybere obrázek, obrázek načteme do zaměstnance a zavoláme metodu AktualizujFor­mularovaData, kterou vytvoříme později.  

private void btnvybratFoto_Click(object sender, EventArgs e)
{
    OpenFileDialog dialog = new OpenFileDialog();
    dialog.Filter = "Fotka JPG (*.jpg)|*.jpg|Fotka PNG (*.png)|*.png|Fotka BMP (*.bmp)|*.bmp";
    if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
        zamestnanec.Foto = Image.FromFile(dialog.FileName);
        AktualizujFormularovaData();
    }
}
Dialog pro výběr fotky v C# .NET - Soubory v C# .NET

Třída Zamestnanec

Začneme tím, co by mělo být jasné - vlastnostmi. Náš zaměstnanec bude mít Jméno, Příjmení, Email, Telefon, DatumNarození a bude mít i fotku.

class Zamestnanec
{
    public string Jmeno { get; set; }
    public string Prijmeni { get; set; }
    public string Email { get; set; }
    public string Telefon { get; set; }
    public DateTime DatumNarozeni { get; set; }
    public Image Foto { get; set; }
}

Náš první konstruktor (další přidáme, až je budeme potřebovat) bude vytvářet nového prázdného zaměstnance. Neudělá nic jiného, než do vlastností přiřadí prázdné hodnoty.

public Zamestnanec()
{
    Jmeno = "";
    Prijmeni = "";
    Email = "";
    Telefon = "";
    DatumNarozeni = DateTime.Now;
}

Nakonec si ve formuláři vytvořte instanci zaměstnance jako atribut třídy formuláře.

private Zamestnanec zamestnanec = new Zamestnanec();

Nyní máme aplikaci navrženou, příště už se konečně podíváme na samotné zpracovávání složek ZIP a poprvé si vyexportujeme a naimportujeme zaměstnance.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 201x (53.84 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Předchozí článek
Kvíz - Soubory v C# .NET
Všechny články v sekci
Soubory v C# .NET
Článek pro vás napsal Michal Žůrek - misaz
Avatar
Uživatelské hodnocení:
3 hlasů
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.
Aktivity