foreach (Foo foo in contaner.Foos)
{
if ( foo .FileName.EndsWith(".exe") )
{
// executa o actiune
}
}
Ce vi se pare ciudat in codul de mai sus?Ce mi-a sarit mie in ochi in primul moment a fost modul in care se verifica daca extensia la fisier este ".exe". .NET ne pune la dispoztie clasa System.IO.Path, prin intermediul careia putem sa extragem numele de fisier, extensia, full path-ul, root path etc.
In cazul nostru putem sa folosim metoda Path.GetExtension(string). Aceasta metoda o sa ne returneze extensia fisierului, daca fisierul are extensie, iar in cazul in care fisierul nostru nu are extensie atunci o sa returneze stringul gol( String.Empty).
Dar ce se intampla in cazul in care path-ul pe care noi il dam este NULL? Valoarea care o sa fie returnata o sa fie la randul ei NULL.
Codul de mai sus l-am putea rescrie in felul urmator:
foreach (Foo foo in contaner.Foos)
{
if ( Path.GetExtension(foo .FileName) == ".exe" )
{
// executa o actiune
}
}
Nu trebuie sa uitam ca exista si metoda Path.HasExtension(string), care o sa returneze TRUE, daca path-ul dat contine o extensie. In cazul de mai sus nu e nevoie sa facem aceasta verificare, deoarece GetExtension o sa ne returneze mereu string-ul Empty daca fisierul nu contine nici o extensie.Dar trebuie sa avem grija sub ce forma este extensia. Daca pentru noi "exe" este egal cu "eXe" si cu "EXE", atunci verificarea de egalitate trebuie sa fie facuta folosind metoda Equals. Codul nostru ar trebuie sa fie rescris in felul urmator:
foreach (Foo foo in contaner.Foos)
{
if ( Path.GetExtension(foo .FileName).Equals(".exe", StringComparison.InvariantCultureIgnoreCase )
{
// executa o actiune
}
}
As vrea sa atrag atentia ca metoda Path.GetExtension(string) ne returneaza extensia unui fisier inclusiv cu ".". De exemplu pentru "foo.exe", valoarea returnata o sa fie ".exe".Enjoy!
0 comments:
Post a Comment