“Linq para Diretórios/Arquivos” com Delphi Prism 2011 e .NET 4
.NET 4 nos permiti trabalhar com tipos enumerados para diretórios e arquivos através do retorno de listas (collection) a partir de métodos específicos que retornam lista de objetos DirectoryInfo, FileInfo ou FileSystemInfo, através destes objetos o desenvolvimento fica muito mais fácil. Até as versões anteriores ao .NET 4 você poderia obter essas lista como Array. Enumerable collections são mais performáticos que arrays.
Delphi Prism 2011 traz suporte completo a .NET 4, os exemplos a seguir mostram como utilizar enumerar diretórios e arquivos.
Enumareting nome de diretórios – este exemplo lista todos os diretórios a partir de “c:\Program Files\”
class method ConsoleApp.Main(args: array of System.String);
begin
try
var dirPath: System.String := 'c:\Program Files';
// LINQ query.
var dirs := from dir in Directory.EnumerateDirectories(dirPath) select dir;
// Show results.
for each dir in dirs do begin
// Remove path information from string.
Console.WriteLine('{0}', dir.Substring(dir.LastIndexOf('\') + 1))
end;
Console.WriteLine('{0} directories found.', dirs.Count().ToString());
// Optionally create a List collection.
var workDirs: List := new List(dirs)
except
on UAEx: UnauthorizedAccessException do begin
Console.WriteLine(UAEx.Message)
end;
on PathEx: PathTooLongException do begin
Console.WriteLine(PathEx.Message)
end;
end;
Console.ReadKey;
end;
Enumerating arquivos em todos os diretórios – este exemplo procura a palavra “license” em todos os arquivos TXT
class method ConsoleApp.Main(args: array of System.String);
begin
try
var files := from sfile in Directory.EnumerateFiles('c:\', '*.txt', SearchOption.AllDirectories)
from line in File.ReadLines(sfile)
where line.Contains('license')
select new class( File := sfile, Line := line);
for each f in files do begin
Console.WriteLine('{0}'#9'{1}', f.File, f.Line)
end;
Console.WriteLine('{0} files found.', files.Count().ToString());
except
on UAEx: UnauthorizedAccessException do begin
Console.WriteLine(UAEx.Message);
end;
on PathEx: PathTooLongException do begin
Console.WriteLine(PathEx.Message);
end;
end;
Console.ReadKey;
end;
Enumerating uma coleção de objetos DirectoryInfo – este exemplo lista todos os diretórios criados antes de Abril de 2010
class method ConsoleApp.Main(args: array of string);
begin
var dirPrograms: DirectoryInfo := new DirectoryInfo('c:\program files');
var StartOf2010: DateTime := new DateTime(2010, 4, 1);
// LINQ query for all directories created before April of 2010.
var dirs := from dir in dirPrograms.EnumerateDirectories()
where dir.CreationTimeUtc < StartOf2010
select new class (ProgDir := dir);
// Show results.
for each di in dirs do begin
Console.WriteLine('{0}', di.ProgDir.Name)
end;
Console.ReadKey;
end;
Você pode fazer o download do Delphi Prism 2011 Trial aqui.






Deixe uma resposta
Want to join the discussion?Feel free to contribute!