TOC

This article has been localized into Portuguese by the community.

Manipulação de arquivos:

Informação de arquivos e diretórios

As classes File e Directory, que usamos nos dois capítulos anteriores, são ótimas para manipulação direta de arquivos e diretórios. No entanto, às vezes, queremos obter informações sobre eles e, mais uma vez, o namespace System.IO vem em nosso auxílio: as classes FileInfo e DirectoryInfo. Neste capítulo, vamos examinar algumas das maneiras de usar essas duas classes.

A classe FileInfo

Primeiro, vamos explorar uma maneira simples de usar a classe FileInfo.

static void Main(string[] args)
{
    FileInfo fi = new FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
    if(fi != null)
Console.WriteLine(String.Format("Information about file: {0}, {1} bytes, last modified on {2} - Full path: {3}", fi.Name, fi.Length, fi.LastWriteTime, fi.FullName));
    Console.ReadKey();
}

Criamos uma nova instância da classe FileInfo. Leva um parâmetro, que é o caminho para o arquivo que queremos informações. Poderíamos ter apenas especificado um nome de arquivo, mas, por diversão, achei que seria legal obter informações sobre o aplicativo em que estamos trabalhando, isto é, o arquivo EXE no qual nosso projeto está compilado. Como não temos acesso ao projeto Aplicativo em um aplicativo Console (ele faz parte da montagem WinForms), usamos um pouco de Reflection para obter o caminho para o assembly atual. Isso tudo está fora do escopo deste capítulo em particular, mas pelo menos agora você sabe.

Quando temos uma instância de FileInfo, produzimos todo tipo de informação sobre ela. Tente executar o aplicativo e você verá. Tudo muito legal e fácil, e se você olhar a classe FileInfo, verá que ela oferece ainda mais informações, além de atalhos para os métodos encontrados na classe File - e por que não? Nós temos uma referência ao arquivo de qualquer maneira com a instância FileInfo, então podemos obter as mesmas opções que na classe File.

A classe DirectoryInfo

Agora, as informações sobre um único arquivo estão bem, mas usando a classe DirectoryInfo, podemos obter informações sobre todos os arquivos e diretórios dentro de um diretório, o que obviamente é um cenário muito comum. Deixe-me mostrar-lhe um exemplo simples:

DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
if(di != null)
{
    FileInfo[] subFiles = di.GetFiles();
    if(subFiles.Length > 0)
    {
Console.WriteLine("Files:");
foreach(FileInfo subFile in subFiles)
{
    Console.WriteLine("   " + subFile.Name + " (" + subFile.Length + " bytes)");
}
    }
    Console.ReadKey();
}

Em vez de uma instância de FileInfo, criamos uma instância DirectoryInfo. Usamos o mesmo truque para obter o caminho do arquivo em execução e, em seguida, o método GetDirectoryName() da classe Path, para obter apenas a parte do diretório do caminho. Usamos o método GetFiles() para obter uma matriz de instâncias FileInfo, cada uma representando um arquivo no diretório. Em seguida, passamos por ele, imprimindo cada nome de arquivo e tamanho.

Talvez nós também desejemos os diretórios. É tão fácil:

DirectoryInfo[] subDirs = di.GetDirectories();
if(subDirs.Length > 0)
{
    Console.WriteLine("Directories:");
    foreach(DirectoryInfo subDir in subDirs)
    {
Console.WriteLine("   " + subDir.Name);
    }
}

Em algumas situações, você pode querer apenas arquivos ou diretórios com um nome ou extensão de arquivo específicos. Felizmente, o FileInfo e o DirectoryInfo também têm um bom suporte para isso.

Isso nos dará todos os arquivos no diretório com uma extensão .exe:

FileInfo[] subFiles = di.GetFiles("*.exe");

Isso nos dará todos os diretórios que têm a palavra "teste" em algum lugar no nome:

DirectoryInfo[] subDirs = di.GetDirectories("*test*");

Podemos até encontrar arquivos e diretórios recursivamente, o que significa que ele irá procurar em subdiretórios de subdiretórios do .... diretório original:

FileInfo[] subFiles = di.GetFiles("*.exe", SearchOption.AllDirectories);

Para pesquisar apenas o diretório de nível superior, o código teria que ser assim:

FileInfo[] subFiles = di.GetFiles("*.exe", SearchOption.TopDirectoryOnly);

Resumo

Usando as classes FileInfo e DirectoryInfo, podemos descobrir facilmente informações sobre o sistema de arquivos no computador atual.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!