PARTICIPE DO DESAFIO MAY THE FOURTH



Manipulação de arquivos no C#

Neste artigo vamos conferir como podemos criar, copiar, substituir, ler e escrever arquivos em C# de uma forma simples e direta!

System.File

O .NET é um conjunto de bibliotecas (Framework) que nos auxilia na criação de aplicações, e como você deve imaginar, manipular arquivos é algo comum em boa parte dos sistemas.

Desta forma, o .NET traz o System.File, uma lib completa para manipulação de arquivos em qualquer plataforma que suporte o .NET.

IMPORTANTE: Existem alguns métodos como o File.Encrypt que roda exclusivamente no Windows. Neste caso você será alertado pelo compilador e/ou IDE sempre que utilizar algum método específico de uma plataforma.

Para facilitar todos os exemplos a seguir, vamos começar criando uma constante que define o caminho do nosso arquivo. Como estou no Windows neste momento, vou usar o seguinte caminho:

const string filePath = @"C:\dev\meuarquivo.txt";

Tratamento de erros

Outro ponto importante é que a manipulação de arquivos é sensível, então recomenda-se que sempre utiliza-as dentro de um escopo try/catch, conforme abaixo:

try {
    // Manipulação de arquivo
} catch (Exception ex) {
    // Capturar exceção
}

Criar um arquivo

O primeiro método que vamos aprender é o File.Create que cria ou sobrescreve um arquivo no disco. Caso o arquivo não exista, o mesmo será criado, se já existir, será sobrescrito.

É importante salientar que o caminho (Pastas) deve existir, caso contrário, você receberá um DirectoryNotFoundException. Ele não cria a pasta automaticamente. Em adicional, caso não haja permissão para escrita do arquivo no diretório informado, você receberá a exceção UnauthorizedAccessException.

File.Create(filePath);

Adicionar conteúdo a um arquivo

Para adicionar conteúdo (Escrever) em um arquivo, podemos usar o AppendText ou CreateText. A diferença é que o AppendText adiciona um texto ao fim do arquivo, enquanto o CreateText sobrescreve o conteúdo do arquivo com um texto informado.

using var file = File.AppendText(filePath);
file.WriteLine("Teste"); // Adiciona o texto ao fim do arquivo
file.Close();

using var file = File.CreateText(filePath);
file.WriteLine("Teste 2"); // Substitui o conteúdo do arquivo com este texto
file.Close();

É importante notar que ao manipular arquivos grandes, você não precisa ler o arquivo completamente para adicionar conteúdo ao mesmo. Neste caso é preferível utilizar o AppendText.

// ERRADO 
var data = File.ReadText(filePath);
data += "Meu texto adicional";
using var file = File.CreateText(filePath);
file.WriteLine(data); // Substitui o conteúdo do arquivo com este texto
file.Close();

// CORRETO
using var file = File.AppendText(filePath);
file.WriteLine("Meu texto adicional"); // Adiciona o texto ao fim do arquivo
file.Close();

IMPORTANTE: Em caso de arquivos grandes, é recomendado utilizar o StreamWriter para escrita e StreamReader para leitura.

Copiar um arquivo

Para copiar um arquivo podemos usar o File.Copy, informando o caminho completo do arquivo atual e seu destino.

File.Copy(filePath, @"C:\dev\outro.txt");

É importante notar que neste caso, se houver outro arquivo com mesmo nome, você receberá uma execeção. Para sobrescrever o arquivo de origem caso haja, utilize o parâmetro adicional para overwrite no método Copy.

File.Copy(filePath, @"C:\dev\outro.txt", true); // Vai sobrescrever se precisar

Mover um arquivo

Da mesma forma, podemos utilizar o File.Move para mover um arquivo de um diretório para outro, considerando os mesmos pontos do método anterior.

File.Move(filePath, @"C:\dev\temp\novo.txt", overwrite: true);

Substituir um arquivo

Para finalizar, podemos utilizar o File.Replace para substituir um arquivo, também considerando os mesmos pontos dos métodos anteriores.

File.Replace(@"C:\dev\outro.txt", filePath, @"C:\dev\backup.txt");

Excluir um arquivo

Caso queira excluir um arquivo, podemos utilizar o método File.Delete informando o caminho completo do mesmo. Caso o arquivo não seja encontrado ou não possa ser excluído, receberemos uma exceção.

File.Delete(filePath);

Verificar se um arquivo existe

Para verificar se um arquivo existe, podemos utilizar o File.Exists informando o caminho completo do arquivo. Este método nos retorna true ou false para dizer se o arquivo existe ou não.

File.Exists(filePath); // Retorna um booleano

Abertura e leitura de arquivos

Para saber mais sobre a abertura e leitura de arquivos, consulte nosso post anterior sobre Como ler arquivos em C#.

Obter data de última modificação do arquivo

Outro método que já precisei utilizar e foi bem útil chama-se File.GetLastAccessTime que retorna a data/hora do último acesso a um arquivo.

var time = File.GetLastAccessTime(filePath); // DateTime
Console.WriteLine(time);

Obter atributos do arquivo

Para demais atributos do arquivo, podemos utilizar o File.GetAttributes que retorna um enumerador.

var attrs =  File.GetAttributes(filePath);
if ((attrs & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
    Console.WriteLine("read-only");

if ((attrs & FileAttributes.Compressed) == FileAttributes.Compressed)
    Console.WriteLine("compressed");

Conclusão

O System.File tem um enorme leque de opções para manipulação de arquivos, e seu uso é simples e direto. Devemos nos atentar apenas ao tratamento de erros pela sensibilidade na leitura/escrita de arquivos.

Populares

Priority Queue

Priority Queue ou fila prioritária é um tipo de lista inclusa no C# 10 que permite que seus itens...


Implicit Operators no C#

Implicit Operators permitem adicionar comportamentos de conversão a objetos Built In ou complexos...


ASP.NET 5 – Autenticação e Autorização com Bearer e JWT

Este artigo atualmente utiliza a versão 5.0.0-rc.1 do ASP.NET/.NET, o que significa que ainda não...


Clean Code - Guia e Exemplos

Saiba como manter seu código limpo (Clean Code) seguindo algumas práticas sugeridas pelo Robert C...


Git e GitHub - Instalação, Configuração e Primeiros Passos

Git é um sistema de controle de versões distribuídas, enquanto GitHub é uma plataforma que tem o ...


Compartilhe este artigo



Conheça o autor

Me dedico ao desenvolvimento de software desde 2003, sendo minha maior especialidade o Desenvolvimento Web. Durante esta jornada pude trabalhar presencialmente aqui no Brasil e Estados Unidos, atender remotamente times da ?ndia, Inglaterra e Holanda, receber 8x Microsoft MVP e realizar diversas consultorias em empresas e projetos de todos os tamanhos.





2.651

Aulas disponíveis

249

horas de conteúdo

65.384

Alunos matriculados

46.295

Certificados emitidos





Comece de graça agora mesmo!

Temos mais de 19 cursos totalmente de graça e todos com certificado de conclusão.

Começar


Prefere algo mais Premium?

Conheça nossos planos



Premium semestral

Compra única, parcelada em até
12x no cartão de crédito


12x R$

49

,78

=R$ 597,36
  • 6 meses de acesso
  • Acesso à todo conteúdo
  • Emissão de Certificado
  • Tira Dúvidas Online
  • 59 cursos disponíveis
  • 10 carreiras disponíveis
  • 161 temas de tecnologia
  • Conteúdo novo todo mês
  • Encontros Premium

Começar agora

Política de privacidade

Premium anual

Compra única, parcelada em até
12x no cartão de crédito


12x R$

84

,78

=R$ 1.017,36
  • 1 ano de acesso
  • Acesso à todo conteúdo
  • Emissão de Certificado
  • Tira Dúvidas Online
  • 59 cursos disponíveis
  • 10 carreiras disponíveis
  • 161 temas de tecnologia
  • Conteúdo novo todo mês
  • Encontros Premium

Começar agora

Política de privacidade



Precisa de ajuda?

Dúvidas frequentes



  • Posso começar de graça?

    Sim! Basta criar sua conta gratuita no balta.io e começar seus estudos. Nós contamos com diversos cursos TOTALMENTE gratuitos e com certificado de conclusão.

  • Vou ter que pagar algo?

    Nós temos cursos gratuitos e pagos, porém você não precisa informar nenhum dado de pagamento para começar seus estudos gratuitamente conosco. Os cursos gratuitos são completos e com certificado de conclusão, você não paga nada por eles.

    Porém, caso queira algo mais Premium , você terá acesso à diversos benefícios que vão te ajudar ainda mais em sua carreira.

  • Por onde devo começar?

    Siga SEMPRE as nossas Carreiras , elas vão te orientar em todos os sentidos. Os cursos já estão organizados em categorias e carreiras para facilitar seu aprendizado.
    Nossa sugestão para aprendizado é começar pelo Backend e seguindo para Frontend e Mobile.

    • Backend
    • Frontend
    • Mobile

  • Os cursos ensinam tudo que preciso?

    Nenhum curso no mundo vai te ensinar tudo, desculpa ser sincero! Os cursos são uma base, eles fornecem por volta de 30% do que você precisa aprender, o resto é com você, com dedicação e MUITA prática.

  • O que eu devo estudar?

    Java ou .NET? Angular ou React? Xamarin ou Flutter? A resposta é simples e direta: "Você já sabe o básico?"

    Se você ainda não sabe BEM o básico, ou seja, os fundamentos, OOP, SOLID, Clean Code, está perdendo tempo estudando Frameworks ou até coisas mais avançadas como Docker. Foque nos seus objetivos primeiro.
    Agora se você está indeciso sobre qual Framework estudar, a boa notícia é que o mercado neste momento está bem aquecido e você tem várias oportunidade. Desta forma o que levaríamos em conta para tomar esta decisão seria:

    • Já sei o básico
    • O Framework/Tecnologia tem mercado onde eu estou (região)
    • O Framework/Tecnologia é utilizado em uma empresa onde quero atual
    • O Framework/Tecnologia resolve meu problema
    • Eu gosto de utilizar o Framework/Tecnologia

  • Estou pronto para estudar no balta.io?

    Com certeza! O primeiro passo é começar e você pode fazer isto agora mesmo!

    Começar de graça

Ainda tem dúvidas?





Assine nosso Newsletter

Receba em primeira mão todas as nossas novidades.

Cadastrar


balta.io