“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!