Compartilhar via


Como obter informações sobre arquivos, pastas e unidades (Guia de Programação em C#)

No.NET Framework, você pode acessar informações do sistema de arquivo, usando as seguintes classes:

O FileInfo e DirectoryInfo classes que representam um arquivo ou diretório e conter propriedades que expõem a muitos dos atributos de arquivo suportados pelo sistema de arquivos NTFS. Eles também contêm métodos para abrir, fechar, mover e excluir arquivos e pastas. Você pode criar instâncias dessas classes, passando uma seqüência de caracteres que representa o nome do arquivo, pasta ou unidade para o construtor:

System.IO.DriveInfo di = new System.IO.DriveInfo(@"C:\");

Você também pode obter os nomes dos arquivos, pastas ou unidades por meio de chamadas para DirectoryInfo.GetDirectories, DirectoryInfo.GetFiles, e DriveInfo.RootDirectory.

O Directory e File classes fornecem métodos estáticos para obter informações sobre arquivos e diretórios.

Exemplo

O exemplo a seguir mostra vários modos de acessar informações sobre arquivos e pastas.

class FileSysInfo
{
    static void Main()
    {
        // You can also use System.Environment.GetLogicalDrives to 
        // obtain names of all logical drives on the computer.
        System.IO.DriveInfo di = new System.IO.DriveInfo(@"C:\");
        Console.WriteLine(di.TotalFreeSpace);
        Console.WriteLine(di.VolumeLabel);

        // Get the root directory and print out some information about it.
        System.IO.DirectoryInfo dirInfo = di.RootDirectory;
        Console.WriteLine(dirInfo.Attributes.ToString());

        // Get the files in the directory and print out some information about them.
        System.IO.FileInfo[] fileNames = dirInfo.GetFiles("*.*");


        foreach (System.IO.FileInfo fi in fileNames)
        {
            Console.WriteLine("{0}: {1}: {2}", fi.Name, fi.LastAccessTime, fi.Length);
        }

        // Get the subdirectories directly that is under the root. 
        // See "How to: Iterate Through a Directory Tree" for an example of how to
        // iterate through an entire tree.
        System.IO.DirectoryInfo[] dirInfos = dirInfo.GetDirectories("*.*");

        foreach (System.IO.DirectoryInfo d in dirInfos)
        {
            Console.WriteLine(d.Name);
        }

        // The Directory and File classes provide several static methods 
        // for accessing files and directories. 

        // Get the current application directory. 
        string currentDirName = System.IO.Directory.GetCurrentDirectory();
        Console.WriteLine(currentDirName);           

        // Get an array of file names as strings rather than FileInfo objects. 
        // Use this method when storage space is an issue, and when you might 
        // hold on to the file name reference for a while before you try to access 
        // the file. 
        string[] files = System.IO.Directory.GetFiles(currentDirName, "*.txt");

        foreach (string s in files)
        {
            // Create the FileInfo object only when needed to ensure 
            // the information is as current as possible.
            System.IO.FileInfo fi = null;
            try
            {
                 fi = new System.IO.FileInfo(s);
            }
            catch (System.IO.FileNotFoundException e)
            {
                // To inform the user and continue is 
                // sufficient for this demonstration. 
                // Your application may require different behavior.
                Console.WriteLine(e.Message);
                continue;
            }
            Console.WriteLine("{0} : {1}",fi.Name, fi.Directory);
        }

        // Change the directory. In this case, first check to see 
        // whether it already exists, and create it if it does not. 
        // If this is not appropriate for your application, you can 
        // handle the System.IO.IOException that will be raised if the 
        // directory cannot be found. 
        if (!System.IO.Directory.Exists(@"C:\Users\Public\TestFolder\"))
        {
            System.IO.Directory.CreateDirectory(@"C:\Users\Public\TestFolder\");
        }

        System.IO.Directory.SetCurrentDirectory(@"C:\Users\Public\TestFolder\");

        currentDirName = System.IO.Directory.GetCurrentDirectory();
        Console.WriteLine(currentDirName);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}

Programação robusta

Quando você processa as seqüências de caracteres do caminho especificado pelo usuário, você também deve lidar com exceções para as seguintes condições:

  • O nome do arquivo está malformado. Por exemplo, ele contém caracteres inválidos ou somente espaços em branco.

  • O nome do arquivo é nulo.

  • O nome do arquivo é maior que o comprimento máximo definido pelo sistema.

  • O nome do arquivo contém um dois-pontos (:).

Se o aplicativo não tiver permissões suficientes para ler o arquivo especificado, o Exists método retorna false independentemente da existência de um caminho; o método não não lança uma exceção.

Consulte também

Referência

System.IO

Conceitos

Guia de Programação em C#

Outros recursos

Sistema de arquivos e o Registro (Guia de Programação em C#)