Compartilhar via


File Classe

Definição

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

public ref class File abstract sealed
public ref class File sealed
public static class File
public sealed class File
[System.Runtime.InteropServices.ComVisible(true)]
public static class File
type File = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type File = class
Public Class File
Public NotInheritable Class File
Herança
File
Atributos

Exemplos

O exemplo a seguir demonstra como usar a classe File para verificar se um arquivo existe e, dependendo do resultado, crie um novo arquivo e escreva nele ou abra o arquivo existente e leia-o. Antes de executar o código, crie uma pasta c:\temp.

using namespace System;
using namespace System::IO;
int main()
{
   String^ path = "c:\\temp\\MyTest.txt";
   if (  !File::Exists( path ) )
   {
      
      // Create a file to write to.
      StreamWriter^ sw = File::CreateText( path );
      try
      {
         sw->WriteLine( "Hello" );
         sw->WriteLine( "And" );
         sw->WriteLine( "Welcome" );
      }
      finally
      {
         if ( sw )
                  delete (IDisposable^)(sw);
      }
   }

   // Open the file to read from.
   StreamReader^ sr = File::OpenText( path );
   try
   {
      String^ s = "";
      while ( s = sr->ReadLine() )
      {
         Console::WriteLine( s );
      }
   }
   finally
   {
      if ( sr )
            delete (IDisposable^)(sr);
   }

   try
   {
      String^ path2 = String::Concat( path, "temp" );
      
      // Ensure that the target does not exist.
      File::Delete( path2 );
      
      // Copy the file.
      File::Copy( path, path2 );
      Console::WriteLine( "{0} was copied to {1}.", path, path2 );
      
      // Delete the newly created file.
      File::Delete( path2 );
      Console::WriteLine( "{0} was successfully deleted.", path2 );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The process failed: {0}", e );
   }
}
using System;
using System.IO;

class Test
{
    public static void Main()
    {
        string path = @"c:\temp\MyTest.txt";
        if (!File.Exists(path))
        {
            // Create a file to write to.
            using (StreamWriter sw = File.CreateText(path))
            {
                sw.WriteLine("Hello");
                sw.WriteLine("And");
                sw.WriteLine("Welcome");
            }
        }

        // Open the file to read from.
        using (StreamReader sr = File.OpenText(path))
        {
            string s;
            while ((s = sr.ReadLine()) != null)
            {
                Console.WriteLine(s);
            }
        }
    }
}
open System.IO

let path = @"c:\temp\MyTest.txt"

if File.Exists path |> not then
    // Create a file to write to.
    use sw = File.CreateText path
    sw.WriteLine "Hello"
    sw.WriteLine "And"
    sw.WriteLine "Welcome"

// Open the file to read from.
do
    use sr = File.OpenText path
    let mutable s = sr.ReadLine()

    while isNull s |> not do
        printfn $"{s}"
        s <- sr.ReadLine()
Imports System.IO

Public Class Test
    Public Shared Sub Main()
        Dim path As String = "c:\temp\MyTest.txt"
        If File.Exists(path) = False Then
            ' Create a file to write to.
            Using sw As StreamWriter = File.CreateText(path)
                sw.WriteLine("Hello")
                sw.WriteLine("And")
                sw.WriteLine("Welcome")
           End Using
        End If

        ' Open the file to read from.
        Using sr As StreamReader = File.OpenText(path)
            Do While sr.Peek() >= 0
                Console.WriteLine(sr.ReadLine())
            Loop
        End Using
    End Sub
End Class

Comentários

Use a classe File para operações típicas, como copiar, mover, renomear, criar, abrir, excluir e acrescentar a um único arquivo de cada vez. Você também pode usar a classe File para obter e definir atributos de arquivo ou DateTime informações relacionadas à criação, acesso e gravação de um arquivo. Se você quiser executar operações em vários arquivos, consulte Directory.GetFiles ou DirectoryInfo.GetFiles.

Muitos dos métodos File retornam outros tipos de E/S quando você cria ou abre arquivos. Você pode usar esses outros tipos para manipular ainda mais um arquivo. Para obter mais informações, consulte membros File específicos, como OpenText, CreateTextou Create.

Como todos os métodos File são estáticos, se você quiser executar apenas uma ação, talvez seja mais eficiente usar um método File do que um método de instância FileInfo correspondente. Todos os métodos File exigem o caminho para o arquivo que você está manipulando.

Os métodos estáticos da classe File executam verificações de segurança em todos os métodos. Se você quiser reutilizar um objeto várias vezes, considere usar o método de instância correspondente de FileInfo, pois a verificação de segurança nem sempre será necessária.

Por padrão, o acesso completo de leitura/gravação a novos arquivos é concedido a todos os usuários.

A tabela a seguir descreve as enumerações usadas para personalizar o comportamento de vários métodos de File.

Enumeração Descrição
FileAccess Especifica o acesso de leitura e gravação a um arquivo.
FileShare Especifica o nível de acesso permitido para um arquivo que já está em uso.
FileMode Especifica se o conteúdo de um arquivo existente é preservado ou substituído e se as solicitações para criar um arquivo existente causam uma exceção.

Nota

Em membros que aceitam um caminho como uma cadeia de caracteres de entrada, esse caminho deve ser bem formado ou uma exceção é gerada. Por exemplo, se um caminho for totalmente qualificado, mas começar com um espaço, o caminho não será cortado em métodos da classe. Portanto, o caminho é malformado e uma exceção é gerada. Da mesma forma, um caminho ou uma combinação de caminhos não pode ser totalmente qualificado duas vezes. Por exemplo, "c:\temp c:\windows" também gera uma exceção na maioria dos casos. Verifique se os caminhos estão bem formados ao usar métodos que aceitam uma cadeia de caracteres de caminho.

Em membros que aceitam um caminho, o caminho pode se referir a um arquivo ou apenas a um diretório. O caminho especificado também pode se referir a um caminho relativo ou a um caminho UNC (Convenção Universal de Nomenclatura) para um servidor e um nome de compartilhamento. Por exemplo, todos os seguintes são caminhos aceitáveis:

  • "c:\\\MyDir\\\MyFile.txt" em C#ou "c:\MyDir\MyFile.txt" no Visual Basic.
  • "c:\\\MyDir" em C#ou "c:\MyDir" no Visual Basic.
  • "MyDir\\\MySubdir" em C#ou "MyDir\MySubDir" no Visual Basic.
  • "\\\\\\\MyServer\\\MyShare" em C#ou "\\\MyServer\MyShare" no Visual Basic.

Para obter uma lista de tarefas comuns de E/S, consulte Tarefas comuns de E/S.

Métodos

AppendAllBytes(String, Byte[])

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

AppendAllBytes(String, ReadOnlySpan<Byte>)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

AppendAllBytesAsync(String, Byte[], CancellationToken)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

AppendAllBytesAsync(String, ReadOnlyMemory<Byte>, CancellationToken)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

AppendAllLines(String, IEnumerable<String>)

Acrescenta linhas a um arquivo e fecha o arquivo. Se o arquivo especificado não existir, esse método criará um arquivo, gravará as linhas especificadas no arquivo e fechará o arquivo.

AppendAllLines(String, IEnumerable<String>, Encoding)

Acrescenta linhas a um arquivo usando uma codificação especificada e fecha o arquivo. Se o arquivo especificado não existir, esse método criará um arquivo, gravará as linhas especificadas no arquivo e fechará o arquivo.

AppendAllLinesAsync(String, IEnumerable<String>, CancellationToken)

Acrescenta as linhas de forma assíncrona a um arquivo e fecha o arquivo. Se o arquivo especificado não existir, esse método criará um arquivo, gravará as linhas especificadas no arquivo e fechará o arquivo.

AppendAllLinesAsync(String, IEnumerable<String>, Encoding, CancellationToken)

Acrescenta as linhas de forma assíncrona a um arquivo usando uma codificação especificada e fecha o arquivo. Se o arquivo especificado não existir, esse método criará um arquivo, gravará as linhas especificadas no arquivo e fechará o arquivo.

AppendAllText(String, ReadOnlySpan<Char>)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

AppendAllText(String, ReadOnlySpan<Char>, Encoding)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

AppendAllText(String, String)

Abre um arquivo, acrescenta a cadeia de caracteres especificada ao arquivo e fecha o arquivo. Se o arquivo não existir, esse método criará um arquivo, gravará a cadeia de caracteres especificada no arquivo e fechará o arquivo.

AppendAllText(String, String, Encoding)

Acrescenta a cadeia de caracteres especificada ao arquivo usando a codificação especificada, criando o arquivo se ele ainda não existir.

AppendAllTextAsync(String, ReadOnlyMemory<Char>, CancellationToken)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

AppendAllTextAsync(String, ReadOnlyMemory<Char>, Encoding, CancellationToken)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

AppendAllTextAsync(String, String, CancellationToken)

Abre um arquivo de forma assíncrona ou cria um arquivo se ele ainda não existir, acrescenta a cadeia de caracteres especificada ao arquivo e fecha o arquivo.

AppendAllTextAsync(String, String, Encoding, CancellationToken)

Abre um arquivo de forma assíncrona ou cria o arquivo se ele ainda não existir, acrescenta a cadeia de caracteres especificada ao arquivo usando a codificação especificada e fecha o arquivo.

AppendText(String)

Cria um StreamWriter que acrescenta texto codificado utf-8 a um arquivo existente ou a um novo arquivo se o arquivo especificado não existir.

Copy(String, String)

Copia um arquivo existente para um novo arquivo. Não é permitido substituir um arquivo com o mesmo nome.

Copy(String, String, Boolean)

Copia um arquivo existente para um novo arquivo. A substituição de um arquivo com o mesmo nome é permitida.

Create(String)

Cria ou trunca e substitui um arquivo no caminho especificado.

Create(String, Int32)

Cria ou trunca e substitui um arquivo no caminho especificado, especificando um tamanho de buffer.

Create(String, Int32, FileOptions)

Cria ou substitui um arquivo no caminho especificado, especificando um tamanho de buffer e opções que descrevem como criar ou substituir o arquivo.

Create(String, Int32, FileOptions, FileSecurity)

Cria ou substitui um arquivo no caminho especificado, especificando um tamanho de buffer, opções que descrevem como criar ou substituir o arquivo e um valor que determina o controle de acesso e a segurança de auditoria do arquivo.

CreateSymbolicLink(String, String)

Cria um link simbólico de arquivo identificado por path que aponta para pathToTarget.

CreateText(String)

Cria ou abre um arquivo para gravar texto codificado em UTF-8. Se o arquivo já existir, seu conteúdo será substituído.

Decrypt(String)

Descriptografa um arquivo criptografado pela conta atual usando o método Encrypt(String).

Delete(String)

Exclui o arquivo especificado.

Encrypt(String)

Criptografa um arquivo para que somente a conta usada para criptografar o arquivo possa descriptografá-lo.

Exists(String)

Determina se o arquivo especificado existe.

GetAccessControl(String)

Obtém um objeto FileSecurity que encapsula as entradas de ACL (lista de controle de acesso) para um arquivo especificado.

GetAccessControl(String, AccessControlSections)

Obtém um objeto FileSecurity que encapsula o tipo especificado de entradas acl (lista de controle de acesso) para um arquivo específico.

GetAttributes(SafeFileHandle)

Obtém o FileAttributes especificado do arquivo ou diretório associado ao fileHandle.

GetAttributes(String)

Obtém o FileAttributes do arquivo no caminho.

GetCreationTime(SafeFileHandle)

Retorna a hora de criação do arquivo ou diretório especificado.

GetCreationTime(String)

Retorna a data e a hora de criação do arquivo ou diretório especificado.

GetCreationTimeUtc(SafeFileHandle)

Retorna a data e a hora de criação, em UTC (Tempo Universal Coordenado), do arquivo ou diretório especificado.

GetCreationTimeUtc(String)

Retorna a data e a hora de criação, em UTC (Tempo Universal Coordenado), do arquivo ou diretório especificado.

GetLastAccessTime(SafeFileHandle)

Retorna a data e a hora do último acesso do arquivo ou diretório especificado.

GetLastAccessTime(String)

Retorna a data e a hora em que o arquivo ou diretório especificado foi acessado pela última vez.

GetLastAccessTimeUtc(SafeFileHandle)

Retorna a data e a hora do último acesso, em UTC (Tempo Universal Coordenado), do arquivo ou diretório especificado.

GetLastAccessTimeUtc(String)

Retorna a data e a hora, em UTC (Tempo Universal Coordenado), que o arquivo ou diretório especificado foi acessado pela última vez.

GetLastWriteTime(SafeFileHandle)

Retorna a data e a hora da última gravação do arquivo ou diretório especificados.

GetLastWriteTime(String)

Retorna a data e a hora em que o arquivo ou diretório especificado foi gravado pela última vez.

GetLastWriteTimeUtc(SafeFileHandle)

Retorna a data e a hora da última gravação, em UTC (Tempo Universal Coordenado), do arquivo ou diretório especificado.

GetLastWriteTimeUtc(String)

Retorna a data e a hora, em UTC (Tempo Universal Coordenado), em que o arquivo ou diretório especificado foi gravado pela última vez.

GetUnixFileMode(SafeFileHandle)

Obtém o UnixFileMode do identificador de arquivo especificado.

GetUnixFileMode(String)

Obtém o UnixFileMode do arquivo no caminho.

Move(String, String)

Move um arquivo especificado para um novo local, fornecendo a opção para especificar um novo nome de arquivo.

Move(String, String, Boolean)

Move um arquivo especificado para um novo local, fornecendo as opções para especificar um novo nome de arquivo e substituir o arquivo de destino se ele já existir.

Open(String, FileMode)

Abre um FileStream no caminho especificado com acesso de leitura/gravação sem compartilhamento.

Open(String, FileMode, FileAccess)

Abre um FileStream no caminho especificado, com o modo e o acesso especificados sem compartilhamento.

Open(String, FileMode, FileAccess, FileShare)

Abre um FileStream no caminho especificado, tendo o modo especificado com acesso de leitura, gravação ou leitura/gravação e a opção de compartilhamento especificada.

Open(String, FileStreamOptions)

Inicializa uma nova instância da classe FileStream com o caminho especificado, o modo de criação, a permissão de leitura/gravação e compartilhamento, o acesso que outros FileStreams podem ter para o mesmo arquivo, o tamanho do buffer, opções de arquivo adicionais e o tamanho da alocação.

OpenHandle(String, FileMode, FileAccess, FileShare, FileOptions, Int64)

Inicializa uma nova instância da classe SafeFileHandle com o caminho especificado, o modo de criação, a permissão de leitura/gravação e compartilhamento, o acesso que outros SafeFileHandles podem ter para o mesmo arquivo, opções de arquivo adicionais e o tamanho da alocação.

OpenRead(String)

Abre um arquivo existente para leitura.

OpenText(String)

Abre um arquivo de texto codificado em UTF-8 existente para leitura.

OpenWrite(String)

Abre um arquivo existente ou cria um novo arquivo para gravação.

ReadAllBytes(String)

Abre um arquivo binário, lê o conteúdo do arquivo em uma matriz de bytes e fecha o arquivo.

ReadAllBytesAsync(String, CancellationToken)

Abre um arquivo binário de forma assíncrona, lê o conteúdo do arquivo em uma matriz de bytes e fecha o arquivo.

ReadAllLines(String)

Abre um arquivo de texto, lê todas as linhas do arquivo e fecha o arquivo.

ReadAllLines(String, Encoding)

Abre um arquivo, lê todas as linhas do arquivo com a codificação especificada e fecha o arquivo.

ReadAllLinesAsync(String, CancellationToken)

Abre um arquivo de texto de forma assíncrona, lê todas as linhas do arquivo e fecha o arquivo.

ReadAllLinesAsync(String, Encoding, CancellationToken)

Abre um arquivo de texto de forma assíncrona, lê todas as linhas do arquivo com a codificação especificada e fecha o arquivo.

ReadAllText(String)

Abre um arquivo de texto, lê todo o texto no arquivo e fecha o arquivo.

ReadAllText(String, Encoding)

Abre um arquivo, lê todo o texto no arquivo com a codificação especificada e fecha o arquivo.

ReadAllTextAsync(String, CancellationToken)

Abre um arquivo de texto de forma assíncrona, lê todo o texto no arquivo e fecha o arquivo.

ReadAllTextAsync(String, Encoding, CancellationToken)

Abre um arquivo de texto de forma assíncrona, lê todo o texto no arquivo com a codificação especificada e fecha o arquivo.

ReadLines(String)

Lê as linhas de um arquivo.

ReadLines(String, Encoding)

Leia as linhas de um arquivo que tem uma codificação especificada.

ReadLinesAsync(String, CancellationToken)

Lê as linhas de um arquivo de forma assíncrona.

ReadLinesAsync(String, Encoding, CancellationToken)

Lê de forma assíncrona as linhas de um arquivo que tem uma codificação especificada.

Replace(String, String, String)

Substitui o conteúdo de um arquivo especificado pelo conteúdo de outro arquivo, excluindo o arquivo original e criando um backup do arquivo substituído.

Replace(String, String, String, Boolean)

Substitui o conteúdo de um arquivo especificado pelo conteúdo de outro arquivo, excluindo o arquivo original e criando um backup do arquivo substituído e, opcionalmente, ignora erros de mesclagem.

ResolveLinkTarget(String, Boolean)

Obtém o destino do link de arquivo especificado.

SetAccessControl(String, FileSecurity)

Aplica entradas acl (lista de controle de acesso) descritas por um objeto FileSecurity ao arquivo especificado.

SetAttributes(SafeFileHandle, FileAttributes)

Define o FileAttributes especificado do arquivo ou diretório associado ao fileHandle.

SetAttributes(String, FileAttributes)

Define o FileAttributes especificado do arquivo no caminho especificado.

SetCreationTime(SafeFileHandle, DateTime)

Define a data e a hora em que o arquivo ou diretório foi criado.

SetCreationTime(String, DateTime)

Define a data e a hora em que o arquivo foi criado.

SetCreationTimeUtc(SafeFileHandle, DateTime)

Define a data e a hora, em UTC (Tempo Universal Coordenado), que o arquivo ou diretório foi criado.

SetCreationTimeUtc(String, DateTime)

Define a data e a hora, em UTC (Tempo Universal Coordenado), que o arquivo foi criado.

SetLastAccessTime(SafeFileHandle, DateTime)

Define a data e a hora em que o arquivo ou diretório especificado foi acessado pela última vez.

SetLastAccessTime(String, DateTime)

Define a data e a hora em que o arquivo especificado foi acessado pela última vez.

SetLastAccessTimeUtc(SafeFileHandle, DateTime)

Define a data e a hora, em UTC (Tempo Universal Coordenado), que o arquivo ou diretório especificado foi acessado pela última vez.

SetLastAccessTimeUtc(String, DateTime)

Define a data e a hora, em UTC (Tempo Universal Coordenado), que o arquivo especificado foi acessado pela última vez.

SetLastWriteTime(SafeFileHandle, DateTime)

Define a data e a hora em que o arquivo ou diretório especificado foi gravado pela última vez.

SetLastWriteTime(String, DateTime)

Define a data e a hora em que o arquivo especificado foi gravado pela última vez.

SetLastWriteTimeUtc(SafeFileHandle, DateTime)

Define a data e a hora, em UTC (Tempo Universal Coordenado), em que o arquivo ou diretório especificado foi gravado pela última vez.

SetLastWriteTimeUtc(String, DateTime)

Define a data e a hora, em UTC (Tempo Universal Coordenado), em que o arquivo especificado foi gravado pela última vez.

SetUnixFileMode(SafeFileHandle, UnixFileMode)

Define o UnixFileMode especificado do identificador de arquivo especificado.

SetUnixFileMode(String, UnixFileMode)

Define o UnixFileMode especificado do arquivo no caminho especificado.

WriteAllBytes(String, Byte[])

Cria um novo arquivo, grava a matriz de bytes especificada no arquivo e fecha o arquivo. Se o arquivo de destino já existir, ele será truncado e substituído.

WriteAllBytes(String, ReadOnlySpan<Byte>)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

WriteAllBytesAsync(String, Byte[], CancellationToken)

Cria um novo arquivo de forma assíncrona, grava a matriz de bytes especificada no arquivo e fecha o arquivo. Se o arquivo de destino já existir, ele será truncado e substituído.

WriteAllBytesAsync(String, ReadOnlyMemory<Byte>, CancellationToken)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

WriteAllLines(String, IEnumerable<String>)

Cria um novo arquivo, grava uma coleção de cadeias de caracteres no arquivo e fecha o arquivo.

WriteAllLines(String, IEnumerable<String>, Encoding)

Cria um novo arquivo usando a codificação especificada, grava uma coleção de cadeias de caracteres no arquivo e fecha o arquivo.

WriteAllLines(String, String[])

Cria um novo arquivo, grava a matriz de cadeia de caracteres especificada no arquivo e fecha o arquivo.

WriteAllLines(String, String[], Encoding)

Cria um novo arquivo, grava a matriz de cadeia de caracteres especificada no arquivo usando a codificação especificada e fecha o arquivo.

WriteAllLinesAsync(String, IEnumerable<String>, CancellationToken)

Cria um novo arquivo de forma assíncrona, grava as linhas especificadas no arquivo e fecha o arquivo.

WriteAllLinesAsync(String, IEnumerable<String>, Encoding, CancellationToken)

Cria um novo arquivo de forma assíncrona, grava as linhas especificadas no arquivo usando a codificação especificada e fecha o arquivo.

WriteAllText(String, ReadOnlySpan<Char>)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

WriteAllText(String, ReadOnlySpan<Char>, Encoding)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

WriteAllText(String, String)

Cria um novo arquivo, grava a cadeia de caracteres especificada no arquivo e fecha o arquivo. Se o arquivo de destino já existir, ele será truncado e substituído.

WriteAllText(String, String, Encoding)

Cria um novo arquivo, grava a cadeia de caracteres especificada no arquivo usando a codificação especificada e fecha o arquivo. Se o arquivo de destino já existir, ele será truncado e substituído.

WriteAllTextAsync(String, ReadOnlyMemory<Char>, CancellationToken)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

WriteAllTextAsync(String, ReadOnlyMemory<Char>, Encoding, CancellationToken)

Fornece métodos estáticos para a criação, cópia, exclusão, movimentação e abertura de um único arquivo e auxilia na criação de objetos FileStream.

WriteAllTextAsync(String, String, CancellationToken)

Cria um novo arquivo de forma assíncrona, grava a cadeia de caracteres especificada no arquivo e fecha o arquivo. Se o arquivo de destino já existir, ele será truncado e substituído.

WriteAllTextAsync(String, String, Encoding, CancellationToken)

Cria um novo arquivo de forma assíncrona, grava a cadeia de caracteres especificada no arquivo usando a codificação especificada e fecha o arquivo. Se o arquivo de destino já existir, ele será truncado e substituído.

Aplica-se a

Confira também