.NET oferă o modalitate simplificată și mai ușoară de a lucra cu resursele care trebuie eliminate (eliberate atunci când nu mai avem nevoie de ele) prin construcția numită directivă Using. Iată un exemplu despre felul în care putem citi un fișier (la fel ca în cele două lecții anterioare) și îl eliberăm în mod automat când am terminat cu utilizarea sa, folosind acest cuvânt cheie:
1 2 3 4 |
using (StreamReader cititor = new StreamReader(numeFisier)) { // Foloseste variabila cititor aici } |
Prin includerea declarației variabilei noastre cititor în instrucțiunea using, o putem folosi la fel cum am face-o în mod normal, cu singura diferență că nu trebuie să ne facem griji cu privire la eliberarea fișierului atunci când terminămde lucrat cu el. Cu toate acestea, dacă furnizăm un fișier care nu există, tot vom primi în continuare o excepție de tip System.IO.FileNotFoundException și de aceea tot trebuie să înfășurăm directiva Using într-o construcție Try Catch:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
using System; using System.IO; namespace BunaLume { class Program { static void Main(string[] args) { string numeFisier = "FisierTextInexistent.txt"; CitesteFisier(numeFisier); Console.ReadLine(); } static void CitesteFisier(string numeFisier) { // Exceptii pot fi aruncate in codul urmator try { // Putem declara direct variabila aici using (StreamReader cititor = new StreamReader(numeFisier)) { // Si o putem folosi aici, daca fisierul a fost citit string linie = cititor.ReadLine(); Console.WriteLine(linie); // Si stim ca va fi eliberat aici } } catch (FileNotFoundException fnfe) { // Manipulator exceptie FileNotFoundException // Informam utilizatorul ca fisierul nu exista Console.WriteLine("Fisierul '{0}' nu a fost gasit.", numeFisier); } catch (IOException ioe) { // Manipulator pentru alte tipuri de exceptii de intrare/iesire Console.WriteLine(ioe.StackTrace); } catch (Exception ex) { // Manipulator pentru orice alt tip de exceptie ce nu a fost manipulata specific // Afisam intreaga exceptie la consola Console.WriteLine(ex.ToString()); } } } } |