Body zdarma Java týden
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

Lekce 2 - Úvod do práce se soubory

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 minulé lekci, Výjimky, jsme si vysvětlili výjimky, které k práci se soubory nutně potřebujeme, protože díky nim můžeme reagovat na případné chyby. Dnes si povíme něco o souborech obecně a o právech k zápisu v systémech Windows. Po dočtení tohoto C# .NET tutoriálu budete připraveni se soubory pracovat.

Data, resp. objekty uložené v paměti, se samozřejmě s vypnutím aplikace ztratí. Pokud chceme zajistit, aby data byla tzv. perzistentní (trvalá), musíme je při ukončení programu uložit a při načtení programu opět načíst. K ukládání dat aplikace existuje mnoho způsobů, každý má nějaké výhody a nevýhody. Obecně můžeme ukládat data naší aplikace následujícím způsobem:

  • Textové soubory s plochou strukturou (tzv. flat files, např. .txt a .csv)
  • textové soubory s vnitřní hierarchií (např. .xml nebo .json)
  • Soubory binárního typu (jednoduše otisk paměti do souboru)
  • Databáze

Každý způsob uložení dat má své výhody a nevýhody. My si jednotlivé způsoby v kurzu podrobně popíšeme a hlavně vyzkoušíme. Zaměříme se zejména na to, jak do souborů ukládat objekty a poté je znovu načítat. Databázím se poté věnuje samostatná sekce.

Práva k zápisu v systémech Windows

Windows 7 zápisová práva UAC

Od Windows Vista existuje v systémech Windows tzv. UAC (User Account Control). Technologie zakazuje zápis na systémový oddíl disku (nejčastěji C:\) v případě, že zápis není povolen administrátorem nebo že se nejedná o zápis do osobních složek uživatele. Toto opatření samozřejmě naplnilo diskuzní fóra o programování a rozbilo řadu aplikací. Důležité však je, že toto opatření je správné a pouze zabraňuje špatně napsaným aplikacím měnit co se jim zlíbí. Linuxové systémy mají podobná opatření již dlouhou dobu.

Koncepce systému Windows zahrnuje uživatelské účty. Každý uživatelský účet je realizován složkou (většinou C:\users\jmeno_uzivatele). Tato složka obsahuje mimo jiné dokumenty, pracovní plochu a také tzv. složku s daty aplikací. K této složce se lze dostat při zadání klíče %appdata% do cesty. Zkuste si %appdata% napsat do cesty průzkumníka a složku otevřít. Uvidíte, že ve složce má své podsložky mnoho aplikací, které máte nainstalovány. Právě zde je místo pro nastavení vašich aplikací a další data. Vaše aplikace si zde samozřejmě vytvoří složku se svým jménem a do té si bude vše ukládat. Nebudeme omezováni UAC a zároveň bude naše aplikace umožňovat jiné nastavení pro různé uživatele, aniž bychom to v C# programovali. %appdata% míří vždy k appdata aktuálně přihlášeného uživatele.

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Velkou chybou bylo, že si programy ukládaly data do složky s programem. Program na ploše nebo na starých Windows fungoval, nicméně když se poté nainstaloval do složky Program Files/ na disku C, spadl s chybou při zápisu na disk. Windows tento zápis částečně pro určité aplikace emulovala, ale tím se nebudeme zabývat. Problém lze samozřejmě obejít tím, že aplikaci spustíme jako správce, ale to je špatné řešení.

V této lekci si ukážeme, jak vytvořit v appdata složku pro naši aplikaci. V dalších lekcích již v kódu tato logika nebude obsažena a budou sloužit jako co nejjednodušší ukázka práce se soubory. Pokud budete aplikaci provozovat na svém počítači, nemusíte se o nic starat. Jakmile ji však budete publikovat, je vhodné ji upravit tak, aby appdata používala. Již tedy víme, kam budeme zapisovat. Výjimky jsme si uvedli také. Přesuňme se tedy k samotné práci se soubory.

IO a stream

V .NET existuje tzv. stream, což je obecný "datový proud". Na proud se napojíme a můžeme z něj poté načítat data nebo do něj data naopak zapisovat. Proud je teoreticky univerzální a ten samý proud se může necházet v paměti RAM nebo v souboru na disku. Práce se soubory je tedy realizována právě přes stream a všechny třídy, které si v budoucnu uvedeme, stream nějakým způsobem obalují nebo s ním pracují. My jsme od něj však odstíněni. Pro práci se soubory musíme do programu vložit odkaz na přislušný jmenný prostor, ve kterém se logika nachází:

using System.IO;

V tomto kurzu se budeme v každé lekci zabývat jedním typem souboru a ukážeme si vždy tu třídu, která je k tomu uzpůsobena. Nyní si ukažme naprostý základ toho, jak vytvořit pro naši aplikaci složku v appdata aktuálního uživatele. Budeme k tomu používat třídu Directory, které obsahuje statické metody pro práci se složkami. Dále se podíváme i na třídu File. Tak můžeme data (např. soubor nastaveni.dat) vytvořit s výchozími hodnotami nebo je načíst. Pro práci s cestou použijeme třídu Path. Všechny tři třídy budou podrobně vysvětleny v samostatné lekci, nyní si ukážeme jen to nezbytné. Pojďme tedy napsat aplikaci, která bude mít vlastní složku v AppData a podívá se, jestli existuje její soubor databaze.dat. Nezapomeňte přidat using System.IO.

string cesta = "";
try
{
    cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ITnetwork");
    if (!Directory.Exists(cesta))
        Directory.CreateDirectory(cesta);
}
catch
{
    Console.WriteLine("Nepodařilo se vytvořit složku {0}, zkontrolujte prosím svá oprávnění.", cesta);
}
if (File.Exists(Path.Combine(cesta, "databaze.dat")))
{
    try
    {
        // Zde umístěte kód pro načtení vašeho nastavení ze souboru
    }
    catch (Exception e)
    {
        Console.WriteLine("Při načítání nastavení došlo k následující chybě: {0}", e.Message);
    }
}
else
{
    try
    {
        // Zde umístěte kód pro vytvoření vašeho nastavení
    }
    catch (Exception e)
    {
        Console.WriteLine("Při vytvoření nastavení došlo k následující chybě: {0}", e.Message);
    }
}

Nejprve si uložíme cestu ke složce s naší aplikací do textového řetězce cesta. Lokaci appdata získáme pomocí:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

Tak trochu by se dalo očekávat, že místo tohoto půjde napsat pouze "%appdata%", ale bohužel C# zkratku na cestu nepřevede. GetFolderPath() nám tedy vrátí něco takového (záleží na verzi Windows):

C:\Users\vase_jmeno\AppData\Roaming

Do cesty přidáme ještě složku se jménem naší aplikace. Jméno jsem zvolil ITnetwork, samozřejmě si ho poté upravte. Abychom nemuseli přemýšlet, zda cesty obsahují na konci lomeno nebo jestli má být lomeno zpětné nebo obyčejné, spojíme cestu pomocí statické metody Combine() na třídě Path. V cesta je tedy nyní toto:

C:\Users\vase_jmeno\AppData\Roaming\ITnetwork

Pokud daná složka neexistuje (jedná se o první spuštění aplikace), tak ji vytvoříme. Dále se podíváme, zda existuje soubor, ze kterého chceme data načítat. Pokud ano, provedeme načtení dat. Pokud ne, soubor vytvoříme a nahrajeme do něj výchozí data. Nebo soubor vytvářet ani nebudeme, záleží na typu aplikace.

Po spuštění kódu se nám ve složce %appdata% objeví nová složka:

Appdata a tvoření složky aplikace v C# .NET

Máme tedy rychlý úvod, jak správně ukládat data aplikace. O výjimkách jsme si také řekli. Nic nám již nebrání, abychom si v příští lekci, Práce s textovými soubory v C#, ukázali práci s prvním formátem souborů, budou to textové soubory. Ještě raději zopakuji, že v následujících lekcích kvůli jednoduchosti nebudu řešit zápisová práva a programy budou fungovat jen ve složkách uživatele (např. při spuštění z Visual Studia). Vždy se tedy vraťte sem a kód si upravte, pokud hotovou aplikaci budete chtít šířit.


 

Stáhnout

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

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
13 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Předchozí článek
Výjimky
Všechny články v sekci
Práce se soubory v C#
Miniatura
Následující článek
Práce s textovými soubory v C#
Aktivity (5)

 

 

Komentáře

Avatar
Tomas Ryba
Neregistrovaný
Avatar
Tomas Ryba:30.7.2012 19:05

Nemelo byt na radku c.4 neco jako:
cesta = Path.Combine...

 
Odpovědět 30.7.2012 19:05
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Tomas Ryba
David Čápka:30.7.2012 20:27

Ano, má. Díky, opraveno :)

Odpovědět 30.7.2012 20:27
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
relycanx
Člen
Avatar
relycanx:28.3.2013 22:07

Jsem asi nenormální, když umím úplné základy C# + třídy bez dědičnosti a chci se naučit ukládat do souboru, že? :/ Mě to přijde brutálně těžký a přitom dost podstatné, když chci vytvořit svůj vlastní prográmek, který bude umět ukládat svá data, např. lidi. Třeba jen jména a věk, uložit a načíst z texťáku. Přijde mi totiž jako ztráta času programovat něco, co nejde uložit. Chci programy, které k něčemu budou a nějaký výpočet obvodu, nebo něčeho takového co nepotřebuje ukládání, je příliš jednoduché :( to nemůžu udělat ani delší textovou hru :/ pomůžete mi prosím s tímto problémem? :) třeba jen vypsat základní příkazy pro ukládání, opravdu jednoduchý příklad, aby byla vidět jasně kostra uložení

 
Odpovědět 28.3.2013 22:07
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na relycanx
Petr Nymsa:28.3.2013 22:11

Pokud umíš práce s objekty, měl by jsi už umět tohle :). Ale pročti si další díly této části a určitě na to přijdeš. Prakticky se používají tyto základní třídy, pokud nepotřebuješ XML apod ->

StreamWriter // třída pro zápis do souboru
StreamReader // třída pro čtení ze souboru
FileStream // třída pro tok dat - soubor
FileInfo // - info o souboru
DirecotryInfo // info o složce
File // třída pro rychlou práci se souborem

// a několik dalších

Základní čtení a zápis ení nic těžkého :) Když si nebudeš opravud vědět rady, klidně napiš na fórum a někdo určitě poradí

Odpovědět 28.3.2013 22:11
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
relycanx
Člen
Avatar
Odpovídá na Petr Nymsa
relycanx:28.3.2013 22:13

dík, mrknu na to :)

 
Odpovědět 28.3.2013 22:13
Avatar
magic44
Redaktor
Avatar
magic44:3.6.2014 18:24

Ahoj, :) můžu se zeptat, proč mi úplně stejný kód nefunguje? Když tam mám "DevbookTutorial", tak to funguje, ale když tam dám něco jinýho, tak to píše, že nemám oprávnění. Ale takhle to funguje, jen ve chvíli, když tam je jen to co je tady v tutoriálu, když chci dát kód pro vytvoření nastavení (třetí try), tak to na mě zase háže problém s oprávněním.

Odpovědět 3.6.2014 18:24
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
annihilator
Člen
Avatar
annihilator:3.6.2014 19:27

Ten program maskuje všechny chyby za problém s právy, což může být zavádějící.

Smaž tento kód

catch
            {
                Console.WriteLine("Nepodařilo se vytvořit složku {0}, zkontrolujte prosím svá oprávnění.", cesta);
            }

Ono ti to znova vyhodí výjimku. Ale už v Message nebo InnerException najdeš co tam je za problém.

Odpovědět  +1 3.6.2014 19:27
Hnát se za bystrým zrakem v království jednookých - uzavíráním diskuzí je krátkozraké
Avatar
magic44
Redaktor
Avatar
Odpovídá na annihilator
magic44:3.6.2014 20:07

Díky. Zkusil jsem.. odebrani catch ale VS moc nepotesi, tak jsem tam dal prazdny finally {} a pořád stejná chyba.. když jsem to vrátil zpátky, jak to bylo, tak se složka vytvoří (jakákoli), ale teď když v té složce chci vytvořit soubor, tak mi to hází opět stejný problém s oprávněním (a ten jen tak sám od sebe nezmizel).

Odpovědět 3.6.2014 20:07
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
magic44
Redaktor
Avatar
Odpovídá na annihilator
magic44:3.6.2014 20:11

Tak problém zmizel :D, ještě jednou díky, takovýhle věci jsou opravdu divný :)

Editováno 3.6.2014 20:11
Odpovědět 3.6.2014 20:11
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
kidal5
Člen
Avatar
kidal5:23.8.2014 12:47

Já bych se chtěl zeptat, co interně dělá Path.Combine(). Jenom mezi dva stringy přidá zpětné lomítko?

A dá se nějak přečíst zdrojový kód dané třídy? (Když jsem si hrál s Javou v NetBeansech, tak jsem klikl s ctrl na danou třídu a ono mě to přesměrovalo na její kód. Tak přesně tohle...)

Díky :)

 
Odpovědět 23.8.2014 12:47
Avatar
Odpovídá na kidal5
Michal Štěpánek:23.8.2014 14:33

Path.Combine() se používá tam, kde se chceš dostat do určité složky (Dokumenty, AppData, apod) protože ti jednoduše pomůže s cestou a nemusíš jí psát "natvrdo"...

Odpovědět  -1 23.8.2014 14:33
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na kidal5
Jan Vargovský:23.8.2014 14:48

Spojí ti to cesty do jedné, ale ono je to interně trošku inteligentnější než klasické spojení stringů a přidání lomítek mezi ně.

Ano, dá se to několika způsoby:

  1. dáš kurzor na třídu (nebo metodu, vlastnost, ...), kterou chceš prozkoumat a zmáčkneš F12 - tady ti to ukáže jen signatury metod + summary komentáře (ty co ti ukazuje VS)
  2. najdeš si knihovnu na disku a projedeš si jí dotPeekem od JetBrains - dekompiluješ jejich knihovny - vidíš kód jak vypadá po kompilaci (bez komentářů)
  3. Někde online je jsou vyvěšené .NET zdrojáky i s komentáři, nakonec jsem ti to i našel - http://referencesource.microsoft.com/#…
 
Odpovědět  +1 23.8.2014 14:48
Avatar
kidal5
Člen
Avatar
Odpovídá na Jan Vargovský
kidal5:23.8.2014 17:11

Díky moc :)

 
Odpovědět 23.8.2014 17:11
Avatar
František Pastorek:19.10.2014 15:38

Ako to ze mi tento kod nefunguje. Ak zadam nazov subora tak mi ho normalne vytvori v pripade ze neexistuje. Ak existuje tak ho samozrejme nevytvori ale ani neprebehne catch. Jednoducho to catch vobec neprebehne.

string path = @"\Files\";
path = path + textBox1.Text + ".txt";

if (!Directory.Exists(@"\Files"))
{
     Directory.CreateDirectory(@"\Files");
}

try
{
     if (!File.Exists(path))
     {
          File.Create(path);
          textBox2.Text = textBox2.Text + "Subor " + path + " bol uspesne vytvoreny." + Environment.NewLine;
          textBox1.Text = "";
     }
}
catch
{
     textBox2.Text = textBox2.Text + "Chyba pri vytvoreni subora. Subor " + path + " uz existuje." + Environment.NewLine;
}
Editováno 19.10.2014 15:42
 
Odpovědět 19.10.2014 15:38
Avatar
Lukáš Křehula
Redaktor
Avatar
Lukáš Křehula:19.10.2014 16:50

//Musíš oddělat tu podmínku v Try
Špatně jsem odpověděl, v try máš celou podmínku, do Try dej jenom File.Create(path);

     if (!File.Exists(path))
{
    try
    {
        File.Create(path);
        textBox2.Text = textBox2.Text + "Subor " + path + " bol uspesne vytvoreny." + Environment.NewLine;
        textBox1.Text = "";
    }
    catch
    {
        textBox2.Text = textBox2.Text + "Chyba pri vytvoreni subora. Subor " + path + " uz existuje." + Environment.NewLine;
    }
}
Editováno 19.10.2014 16:54
 
Odpovědět  +1 19.10.2014 16:50
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
David.Landa
Člen
Avatar
David.Landa:23.3.2015 15:57

Není ten if nadbytečný?

if (!Directory.Exists(cesta))
    Directory.CreateDirectory(cesta);

Dokumentace říka, pokud adresář existuje, pak se ho nepokusí vytvořit znovu.

Editováno 23.3.2015 15:58
 
Odpovědět  +1 23.3.2015 15:57
Avatar
pracansky
Člen
Avatar
pracansky:12.4.2015 17:07

%appdata% je cesta do profilu jednoho uživatele ale co když potřebuji uložit nastavení které je společné pro všechny?

Jsou tam je složky jako "All Users","Default User","Default"...
Nerudovská otázka kam s ním?

 
Odpovědět 12.4.2015 17:07
Avatar
blazoid
Člen
Avatar
blazoid:30.10.2015 20:26

Ahoj, mám potíže se třídou "Directory" - když začnu psát Directory, našeptávač mně to nabídne, ovšem jakmile začnu psát tečku a Exists, začne to řvát, že typ "Exists" není ve jmenném prostoru Directory - absolutně se mi tedy nedaří vytvořit:

if (!Directory.E­xists(cesta))
Directory.Cre­ateDirectory(ces­ta);

 
Odpovědět 30.10.2015 20:26
Avatar
Richard H.
Redaktor
Avatar
Odpovídá na blazoid
Richard H.:30.10.2015 21:53

Zkus ignorovat ide a pokus se to zkompilovat pak uvidíš jesli je chyba u tebe nebo u ide.

Odpovědět 30.10.2015 21:53
Malý užitečný manuál je vždy lepší než bichle k ničemu.
Avatar
blazoid
Člen
Avatar
Odpovídá na Richard H.
blazoid:31.10.2015 17:08

Bohužel to při kompilaci vypíše následující:

Error 1 'bool' does not contain a definition for 'Exists' and no extension method 'Exists' accepting a first argument of type 'bool' could be found (are you missing a using directive or an assembly reference?) C:\BLAZEK\C#\Di­rectory\Direc­tory\Directory\Pro­gram.cs 23 32 Directory

Error 2 'bool' does not contain a definition for 'CreateDirectory' and no extension method 'CreateDirectory' accepting a first argument of type 'bool' could be found (are you missing a using directive or an assembly reference?) C:\BLAZEK\C#\Di­rectory\Direc­tory\Directory\Pro­gram.cs 24 31 Directory

  • následně mně to nabídne, zda chci spustit poslední verzi (tedy tu co se naposledy podařilo zkompilovat)...
 
Odpovědět 31.10.2015 17:08
Avatar
blazoid
Člen
Avatar
Odpovídá na blazoid
blazoid:31.10.2015 18:32

Ještě malá poznámka - když jsem si stáhl projekt z těchto stránek, normálně to fungovalo...

 
Odpovědět 31.10.2015 18:32
Avatar
Richard H.
Redaktor
Avatar
Odpovídá na blazoid
Richard H.:31.10.2015 20:54

To je mi ale záhada..nevidím tam žádnou syntaktickou chybu v C# nepracuje nějak moc ale tohle je fakt divné.

Odpovědět 31.10.2015 20:54
Malý užitečný manuál je vždy lepší než bichle k ničemu.
Avatar
Milan Křepelka
Redaktor
Avatar
Odpovídá na blazoid
Milan Křepelka:31.10.2015 21:40

Probém bude v mixování názvů namespaců. Ty máš název programu Directory, tedy i název namespacu bude Directory. A používáš Directory.Create.. . Když tam dáš celý název System.IO.Direc­tory.Create..­., tak to bude v pořádku.

 
Odpovědět  +2 31.10.2015 21:40
Avatar
blazoid
Člen
Avatar
Odpovídá na Milan Křepelka
blazoid:6.11.2015 12:34

Tak jsem to napsal dle Tvých rad (System.IO.Di­rectory.Create), když jsem však začal za tečkou psát Create opět nic. Mám však starší verzi MVS - konkrétně 2010, nemůže to být příčinou?

 
Odpovědět 6.11.2015 12:34
Avatar
Milan Křepelka
Redaktor
Avatar
Milan Křepelka:6.11.2015 13:13

Nepravděpodobné

podle dokumentace je

System.IO.Direc­tory.CreateDi­rectory

s námi již delší dobu

https://msdn.microsoft.com/…vs.110).aspx

Eliminuj chybu. Udělej nový projekt v nějakým lepším názvem. Slovo Directory pro jistotu zcela vynech a zkus to znova.

 
Odpovědět 6.11.2015 13:13
Avatar
blazoid
Člen
Avatar
blazoid:6.11.2015 19:36

Ahoj, tak už to chodí - díky moc.

 
Odpovědět 6.11.2015 19:36
Avatar
Trynar
Člen
Avatar
Trynar:27.11.2018 12:14

Ahoj, poprosil bych o radu jak zde v příkladu níže využít a kde try a catch. Intuitivně bych to použil:

try
{
pathToFiles = @"C:\FilesToTes­t1\";
DirectoryInfo d = new DirectoryInfo(pat­hToFiles);
FileInfo[] Files = d.GetFiles("*­.txt");

}
catch(Exception e)
{
Console.Write­Line(e.Message);
}

Ale bohužel proměné, které dále využívám nejsou pro zbytek programu viditelné. Jak to try, catch použít zde? Jedna z možností je dát do try celý kód, ale přijde mi to nesystematické. Díky. Celý kód níže:

using System;
using System.IO;

namespace FilesPlaying
{
class Program
{
static void Main(string[] args)
{
// Variables
string FileWithoutExt;
string FileExtension;
string pathToFiles;

// Path to files and loading the files
try
{
pathToFiles = @"C:\FilesToTes­t1\";
DirectoryInfo d = new DirectoryInfo(pat­hToFiles);
FileInfo[] Files = d.GetFiles("*­.txt");

}
catch(Exception e)
{
Console.Write­Line(e.Message);
}

Console.Write­Line("For loop, files without extensions: ");
for (int i = 1; i < Files.Length + 1; i++)
{
// Only name of the file without extensions
FileWithoutExt = Path.GetFileNa­meWithoutExten­sion(Files[i]­.Name);
// Only extensions
FileExtension = Path.GetExten­sion(Files[i]­.Name);

// Visual check of the separated names and extensions
Console.Write­Line(FileWithou­tExt + " " + FileExtension);

// Putting strings together: path + file without extension + incrementation + extension
if (i < 10) // Adding 0 to incrementation, like 01, 02 etc.
{
Files[i].Move­To(pathToFiles + FileWithoutExt + "0" + i + FileExtension);
}
else // No adding 0 in front of incrementation
{
Files[i].Move­To(pathToFiles + FileWithoutExt + i + FileExtension);
}

Console.Write­Line(Files[i]);
}
Console.ReadKey();
}
}
}

 
Odpovědět 27.11.2018 12:14
Avatar
Odpovídá na Trynar
Andy Scheuchzer:27.11.2018 17:28

Tak dej

DirectoryInfo d;
FileInfo[] f;

ještě před blok try-catch. Kdyby tě to nechtělo pustit, že to nemá přiřazenou hodnotu, tak tam prostě něco přiřaď (když tam dáš null, můžeš si to pak v pohodě ošetřit i dál).

A používej prosím tlačítko na vložení kódu, pak se to o dost líp čte.

Odpovědět  +1 27.11.2018 17:28
Člověk, co si myslí, že snědl všechnu moudrost světa, i když tomu tak není.
Avatar
Trynar
Člen
Avatar
Odpovídá na Andy Scheuchzer
Trynar:28.11.2018 6:47

Vyřešeno, díky :).

FileInfo[] Files = new FileInfo[0];
string pathToFiles = String.Empty;

 
Odpovědět 28.11.2018 6:47
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 29 zpráv z 29.