C#: atestat și pregătire ONTI

C#: resurse, căi relative și tratarea erorilor de fișier

Organizează resursele unui proiect C# folosind căi relative și using. Distinge un fișier lipsă de datele invalide și păstrează erorile utile pentru depanare.

O aplicație predată într-un alt dosar nu mai găsește calea C:\Users\Autor\Desktop\date.txt. În locul unei căi personale, definim un director al aplicației și construim căile cu Path.Combine. Fișierele de intrare distribuite împreună cu proiectul trebuie să fie documentate și copiate în directorul de ieșire. Datele utilizatorului pot cere un director separat, în care acesta are drept de scriere.

Cum lucrezi cu exemplul

Programul complet folosește C# 7.3 și API-uri disponibile în .NET Framework 4.8. Deschide Lesson.csproj din arhivă sau creează un proiect Console App (.NET Framework 4.8) și înlocuiește Program.cs. Datele de demonstrație sunt incluse în cod.

Descarcă sursele și instrucțiunile.

Ideea și pașii de implementare

Exemplul folosește un director temporar izolat și un StringReader pentru a arăta disciplina de eliberare a resurselor fără să depindă de fișiere externe. În varianta cu StreamReader, using închide fișierul inclusiv dacă parsarea eșuează. Nu returna un reader creat într-un using care s-a încheiat deja.

Tratarea erorilor se face la granița operației. FileNotFoundException indică lipsa resursei, UnauthorizedAccessException indică acces refuzat, iar FormatException poate indica un format neașteptat al datelor. Nu transforma toate aceste situații într-o listă goală: utilizatorul ar putea salva peste datele existente crezând că nu există înregistrări.

Exemplu și rezultat așteptat

Cele două linii, Ana și Mihai, sunt citite până la sfârșitul fluxului. Rezultatul este 2 linii. Path.Combine construiește calea către Resurse/date.txt fără concatenarea manuală a separatorului. Programul afișează numai numele fișierului, date.txt, pentru a păstra rezultatul identic pe sisteme cu separatori diferiți.

Schemă pentru lecția 7: Directorul aplicației; Resurse / date.txt; using: deschide și citește; Ieșire: flux închis.Directorul aplicației → Resurse / date.txt → using: deschide și citește → Ieșire: flux închis.Mărește schema ↗

Codul complet

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Globalization;
using System.Xml.Linq;
using System.Data;
class Program {
    static void Main() {
        int count = 0;
        using (var reader = new StringReader("Ana\nMihai\n")) {
            while (reader.ReadLine() != null) count++;
        }
        Console.WriteLine(count + " linii");
        string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Resurse","date.txt");
        Console.WriteLine(Path.GetFileName(path));
    }
}

Rezultatul programului:

2 linii
date.txt

Greșeli și limite

Directory.GetCurrentDirectory poate fi diferit de folderul executabilului. Pentru resurse distribuite lângă aplicație folosește AppDomain.CurrentDomain.BaseDirectory. Nu crea automat un fișier gol când nu găsești baza de date: ai ascunde o eroare de distribuire. Nu afișa întregi detalii tehnice sau parole de conexiune într-un MessageBox; păstrează un mesaj util și date de diagnostic adecvate mediului local.

Exersează

Înlocuiește StringReader cu StreamReader într-un proiect Windows și pregătește un fișier cu două linii. Verifică apoi fișierul gol și lipsa fișierului. Pentru primul caz trebuie să obții zero linii; pentru al doilea, un mesaj explicit despre resursa lipsă. Copiază soluția într-un alt dosar și confirmă că nu mai există referințe la profilul autorului.

Continuă parcursul

Parcursul complet de 50 de lecții

Bazele C#

Lecția precedentă: C#: evenimente și notificarea schimbărilor din model

Lecția următoare: C#: importă date numai după validarea întregului fișier.

Referință: documentația Microsoft.

Întrebări frecvente

De ce folosesc Path.Combine?

Construiește calea din componente fără să presupui manual separatorul potrivit.

Using tratează și eroarea?

Eliberează resursa. Pentru un mesaj sau recuperare controlată ai nevoie separat de tratarea excepției.

Fișierul gol și cel lipsă sunt echivalente?

Nu. Unul există fără date, celălalt indică o resursă absentă și poate necesita altă acțiune.

Un pas mai departe

Autentifică-te pentru a păstra progresul în cont.

Exersează cu o problemă →