Documente Academic
Documente Profesional
Documente Cultură
08 decembrie 2018
În C# fișierele text sunt gestionate, ca şi în C++, prin stream-uri (fluxuri de date structurate pe octeți).
Pentru lucrul cu fișiere text trebuie să utilizați spațiul de nume System.IO, deci veți include în antetul
programului linia: using System.IO;
Cele două clase pe care le vom utiliza sunt StreamReader (pentru citirea datelor din fișier) și
StreamWriter (pentru scrierea datelor în fișier).
Spatiul de nume System.IO contine majoritatea claselor pentru lucrul cu fisiere. Vom analiza in cele
ce urmeaza urmatoarele clase:
File O clasa statica care expune numeroase metode statice pentru copierea, steregerea, crearea
fisierelor.
Directory O clasa statica care expune numeroase metode statice pentru copierea, steregerea,
crearea directoarelor.
Path O clasa care realizeaza operatii asupra stringurilor care reprezinta numele sau calea catre
fisiere sau directoare.
FileInfo Un fisier este reprezentat prin intermediul unui obiect de tipul acestei clase. Obiectul
beneficiaza de o serie de metode pentru manipularea fisierului respectiv.
FileSystemInfo Serveste drept clasa de baza pentru FileInfo si DirectoryInfo. Utilizant conceptul de
polimorfism, creaza facilitatea de a lucra simultan cu fisiere si directoare.
FileStream Un strem de tipul acestei clase permite scrierea intr-un sau citirea dintr-un fisier.
1
StreamReader Citeste caractere dintr-un stream. Un stream de acest tip poate fi creat prin
impachetarea unui stream de tipul FileStream.
P1. În fișierul c:\test\date.txt pe prima linie se găsesc mai multe cuvinte formate din litere.
Aceste cuvinte sunt separate prin spaţii. Să se afişeze cuvintele în fişierul date.out, fiecare
cuvânt pe câte o linie.
2
}
}
}
De menționat că fișierul de intrare trebuie să existe și să nu fie vid! Fișierul de ieșire este creat
automat, iar dacă există este suprascris. Dacă fișierul nu există atunci programul furnizează una din
așa-numitele excepții. Mai multe despre excepții vom discuta într-o lecție ulterioară. Există însă o
modalitate simplă pentru a verifica dacă un fișier există la o anumită locație. Acest lucru se face cu
funcția statică Exists din clasa File. Este returnează valoarea true dacă fișierul există sau valoarea
false în caz contrar.
if (File.Exists("c:\\test\\date.txt"))
{
// citire din fisierul date.txt,
// scriere in fisierul de iesire
}
else
Console.WriteLine("Fisier de intrare inexistent!");
Clasele File si Directory. Aceste doua clase expun numeroase metode statice pentru manipularea
fisierelor si directoarelor. Aceste metode fac posibile o serie de operatii asupra fisierelor si
directoarelor precum si crearea unor streamuri FileStream. Toate metodele sunt statice, asadar
acestea sunt apelate fara a crea instante ale clasei File sau Directory.
Cateva dintre cele mai utile metode ale clasei File sunt:
Open() Returneaza un stream FileStream corespunzator stringului (care reprezinta calea) specificat;
Move() Muta un fisier intr-o noua locatie. Fisierului i se poate specifica un alt nume in noua locatie.
3
GetDirectories() Returneaza un tablou de tip string care contine numele directoarelor aflate in
directorul specificat;
GetFiles() Returneaza un tablou de tip string care contine numele fisierelor aflate in directorul
specificat;
GetFileSystemEntries() Returneaza un tablou de tip string care contine numele fisierelor si
directoarelor aflate in directorul specificat;
Move() Muta un director intr-o noua locatie. Directorului i se poate specifica un alt nume in noua
locatie.
using System;
using System.IO;
class Program
{
{
string str;
char c;
string[] tablou;
do{
str = Console.ReadLine();
}
c=char.Parse(str);
switch(c)
{
4
Console.WriteLine(s);
break;
Console.WriteLine(s);
break;
Console.WriteLine(s);
Break;
}
Console.ReadKey();
}
}
P3. În folderul c:\test se află mai multe fișiere. Se cere să se scrie în fișierul c:\test\lista.txt
numele fișierelor din acest folder care au extensia .in.
f.WriteLine(s);
f.Close();
Folosind funcția GetFiles din clasa Directory se preiau automat fișierele din folderul c:\test care au
extensia ".in". Pattern-ul de căutare, "*.in" este binecunoscut.
5
int suma = 0;
string linie;
char[] sep = {' '};
StreamReader f = new StreamReader("c:\\test\\numere.txt");
while ((linie = f.ReadLine()) != null)
{
string[] numere = linie.Split(sep, StringSplitOptions.RemoveEmptyEntries);
foreach (string x in numere)
suma += int.Parse(x);
}
Console.WriteLine(suma);
f.Close();
Probleme propuse
P4. Se citește un număr natural n. Să se scrie în fișierul patrate.in toate pătratele numerelor naturale
cuprinse între 1 și n.
P5. Fișierele unu.txt și doi.txt conțin pe mai multe linii câte un cuvânt. Să se concateneze conținutul
celor două fișiere în fișierul trei.txt.
P6. Fișierul date.in conține mai multe numere pe mai multe linii. Să se ordoneze crescător șirul de
numere și să se tipărească în fișierul date.out.
6