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

0 respostas

Deixe uma resposta

Want to join the discussion?
Feel free to contribute!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.