Manipulação de Arquivos e Pastas em C#: O Guia Completo

13/09/2024

1. Abrir e Ler Arquivos em C#

Em C#, você pode ler arquivos de várias maneiras. As classes File, StreamReader e FileStream são comumente usadas para essa tarefa. Aqui está um exemplo básico:

Usando File.ReadAllText()

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string conteudo = File.ReadAllText("caminho/para/arquivo.txt");
        Console.WriteLine(conteudo);
    }
}

O método File.ReadAllText() lê todo o conteúdo de um arquivo de texto em uma string. Ele é ideal para ler arquivos pequenos de uma só vez.

Usando StreamReader

Para ler arquivos linha por linha, você pode usar a classe StreamReader:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        using (StreamReader sr = new StreamReader("caminho/para/arquivo.txt"))
        {
            string linha;
            while ((linha = sr.ReadLine()) != null)
            {
                Console.WriteLine(linha);
            }
        }
    }
}

No exemplo acima, o StreamReader lê o arquivo linha por linha até chegar ao final. O using garante que o arquivo seja fechado corretamente após a leitura.

2. Escrever em Arquivos

C# também facilita a escrita em arquivos. Você pode usar File.WriteAllText() ou StreamWriter para escrever dados em arquivos.

Usando File.WriteAllText()

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string conteudo = "Este é o conteúdo do arquivo.";
        File.WriteAllText("caminho/para/arquivo.txt", conteudo);
        Console.WriteLine("Arquivo criado com sucesso.");
    }
}

O método File.WriteAllText() escreve todo o conteúdo em um arquivo de uma só vez. Se o arquivo não existir, ele será criado; se existir, será sobrescrito.

Usando StreamWriter

using System;
using System.IO;

class Program
{
    static void Main()
    {
        using (StreamWriter sw = new StreamWriter("caminho/para/arquivo.txt", true))
        {
            sw.WriteLine("Nova linha adicionada ao arquivo.");
        }
        Console.WriteLine("Linha adicionada com sucesso.");
    }
}

No exemplo acima, o StreamWriter é usado para adicionar uma linha ao arquivo. O segundo argumento true no StreamWriter permite a adição de conteúdo sem sobrescrever o arquivo existente.

3. Manipulação de Pastas

A classe Directory oferece funções para criar, listar e excluir diretórios de forma simples. Aqui estão alguns exemplos úteis:

Criar um Diretório

using System;
using System.IO;

class Program
{
    static void Main()
    {
        if (!Directory.Exists("meu_diretorio"))
        {
            Directory.CreateDirectory("meu_diretorio");
            Console.WriteLine("Diretório criado com sucesso.");
        }
        else
        {
            Console.WriteLine("O diretório já existe.");
        }
    }
}

O método Directory.CreateDirectory() cria um diretório, verificando antes se ele já existe usando Directory.Exists().

Listar Arquivos em um Diretório

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string[] arquivos = Directory.GetFiles("meu_diretorio");
        foreach (var arquivo in arquivos)
        {
            Console.WriteLine(arquivo);
        }
    }
}

O método Directory.GetFiles() retorna uma lista de arquivos dentro do diretório especificado.

Excluir um Diretório

using System;
using System.IO;

class Program
{
    static void Main()
    {
        if (Directory.Exists("meu_diretorio"))
        {
            Directory.Delete("meu_diretorio", true); // O segundo parâmetro 'true' exclui todo o conteúdo do diretório
            Console.WriteLine("Diretório excluído com sucesso.");
        }
        else
        {
            Console.WriteLine("Diretório não encontrado.");
        }
    }
}

O método Directory.Delete() exclui o diretório especificado. O segundo parâmetro true indica que o diretório e todo o seu conteúdo devem ser excluídos.

4. Excluir Arquivos

Para excluir arquivos, você pode usar o método File.Delete():

using System;
using System.IO;

class Program
{
    static void Main()
    {
        if (File.Exists("caminho/para/arquivo.txt"))
        {
            File.Delete("caminho/para/arquivo.txt");
            Console.WriteLine("Arquivo excluído com sucesso.");
        }
        else
        {
            Console.WriteLine("Arquivo não encontrado.");
        }
    }
}

Esse código verifica se o arquivo existe antes de excluí-lo com File.Delete().

5. Manipulação de Permissões de Arquivos

Em C#, você pode alterar as permissões de arquivos e pastas usando a classe FileInfo. Aqui está um exemplo de como alterar permissões:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        FileInfo arquivo = new FileInfo("caminho/para/arquivo.txt");
        arquivo.IsReadOnly = true; // Tornar o arquivo somente leitura
        Console.WriteLine("Permissões alteradas com sucesso.");
    }
}

O exemplo acima torna o arquivo "somente leitura" ao definir a propriedade IsReadOnly como true.

Boas Práticas na Manipulação de Arquivos e Pastas em C#

  • Verificar a Existência: Sempre verifique se um arquivo ou diretório existe antes de tentar manipulá-lo para evitar exceções.
  • Fechar Streams: Ao manipular streams de arquivos, use using para garantir que os arquivos sejam fechados corretamente após o uso.
  • Gerenciar Permissões: Certifique-se de que suas permissões de arquivos estão adequadas para evitar falhas de segurança.
  • Tratar Exceções: Sempre envolva suas operações de arquivo em blocos try-catch para capturar exceções como arquivos inexistentes ou problemas de acesso.

Conclusão

O C# oferece um conjunto robusto de ferramentas para a manipulação de arquivos e pastas através do namespace System.IO. Com essas funções, você pode ler, escrever, excluir e gerenciar arquivos e diretórios de maneira eficiente. Usar essas ferramentas corretamente garante que suas aplicações lidem com arquivos e pastas de forma segura e eficiente.