C# Escrever arquivos de texto

Resumo : neste tutorial, você aprenderá várias técnicas para escrever arquivos de texto em C# usando Filemétodos estáticos e StreamWriterclasses.

Escrevendo todo o texto em um arquivo de texto

O File.WriteAllText()método cria um novo arquivo, grava o conteúdo nele e fecha o arquivo:

public static void WriteAllText (string path, string? contents);Linguagem de código:  C#  ( cs )

Se o arquivo especificado pelo caminho existir, o WriteAllText()método o substituirá. Em outras palavras, o conteúdo do arquivo existente será substituído pelo conteúdo.

O programa a seguir demonstra como usar File.WriteAllText()o método para escrever todo o texto em um arquivo de texto:

using static System.Console;

string path = @"C:\temp\readme.txt";
string contents = "Hello\nGoodbye";

File.WriteAllText(path, contents);Linguagem de código:  C#  ( cs )

Será readme.txtparecido com o seguinte:

Hello
GoodbyeLinguagem de código:  C#  ( cs )

Este programa grava as strings “Hello” e “Goodbye” no readme.txtarquivo localizado no diretório “C:\temp”.

Se o diretório C:\temp não existir, o WriteAllText()método lançará um arquivo DirectoryNotFoundException.

Por exemplo, o programa a seguir tenta gravar texto em um arquivo readme.txtlocalizado no C:\temp1diretório. Como o diretório C:\temp1não existe, o programa mostra uma mensagem fornecida pelo DirectoryNotFoundExceptionobjeto:

using static System.Console;

string path = @"C:\temp1\readme.txt";
string contents = "Hello\nGoodbye";

try
{
    File.WriteAllText(path, contents);
}
catch (DirectoryNotFoundException e)
{
    WriteLine(e.Message);
}Linguagem de código:  C#  ( cs )

Saída:

Could not find a part of the path 'C:\temp1\readme.txt'.Linguagem de código:  C#  ( cs )

Para verificar se o arquivo de texto existe antes de gravar o conteúdo nele, você pode usar o File.Exists()método como este:

using static System.Console;

string path = @"C:\temp\readme.txt";
string contents = "Hello\nGoodbye";

if (!File.Exists(path))
{
    File.WriteAllText(path, contents);
}
else
{
    WriteLine($"The file {path} alrady exists");
}Linguagem de código:  C#  ( cs )

Saída:

The file C:\temp\readme.txt alrady existsLinguagem de código:  C#  ( cs )

Escrevendo uma ou mais strings em um arquivo de texto

Para escrever uma ou mais strings em um arquivo de texto, você usa o File.WriteAllLines()método. O File.WriteAllLines()método cria um novo arquivo, grava uma ou mais strings no arquivo e depois fecha o arquivo:

public static void WriteAllLines (
   string path, 
   string[] contents
);Linguagem de código:  C#  ( cs )

Por exemplo:

string path = @"C:\temp\readme.txt";

string[] lines = new[] {
    "Hello",
    "Hi",
    "Hey"
};

File.WriteAllLines(path, lines);Linguagem de código:  C#  ( cs )

O readme.txtarquivo ficará assim:

Hello
Hi
HeyLinguagem de código:  C#  ( cs )

Escrevendo em um arquivo de texto usando StreamWriter

Quando você tem uma grande quantidade de dados de texto que deseja gravar em um arquivo de texto em ordem sequencial, você pode usar StreamWriter. Por exemplo:

string path = @"C:\temp\readme.txt";

// in practice, the greetings is very big
string[] greetings = new[] { "Hello", "Hi", "Hey" };

var fs = new FileStream(path, FileMode.Open);
var stream = new StreamWriter(fs);

foreach (var greeting in greetings)
{
    // write each line to the stream
    stream.WriteLine(greeting);
}Linguagem de código:  C#  ( cs )

Como funciona.

Primeiro, defina uma variável string chamada “caminho” e atribua a ela o valor do caminho do arquivo C:\temp\ readme.txtonde queremos escrever o texto.

Em seguida, crie uma matriz de strings chamada “saudações” que possui três strings diferentes – "Hello", "Hi"e "Hey".

Em seguida, crie um FileStreamobjeto chamado fs que abra o arquivo especificado pelo caminho com o modo FileMode.Open.

Depois disso, crie um StreamWriterobjeto que grave texto no arquivo usando o FileStreamobjeto.

Por fim, itere o array de saudações e escreva cada elemento no arquivo usando o StreamWriterobjeto.

Escrevendo em um arquivo de texto de forma assíncrona

Para gravar dados em um arquivo de texto de forma assíncrona, você pode usar as asyncversões dos métodos WriteAllTexte :WriteAllLines()

public static Task WriteAllTextAsync (string path, string? contents, CancellationToken cancellationToken = default);
public static Task WriteAllLinesAsync (string path, IEnumerable<string> contents, CancellationToken cancellationToken = default);Linguagem de código:  C#  ( cs )

Por exemplo:

string path = @"C:\temp\readme.txt";

string[] greetings = new[] {
    "Hello",
    "Hi",
    "Hey"
};

await File.WriteAllLinesAsync(path, greetings);Linguagem de código:  C#  ( cs )

Neste exemplo, usamos o WriteAllLinesAsync()método para escrever de forma assíncrona o array de strings em um arquivo de texto.

Observe que usamos a palavra-chave para aguardar a conclusão awaitdo método.WriteAllLinesAsync()

Resumo

  • Use o File.WriteAllText()método para escrever todo o texto em um arquivo de texto.
  • Use o File.WriteAllTextAsync()método para gravar dados de texto em um arquivo de texto de forma assíncrona.
  • Use o File.WriteAllLines()método para escrever uma matriz de strings em um arquivo de texto.
  • Use o File.WriteAllLinesAsync()método para escrever uma matriz de strings em um arquivo de texto de forma assíncrona.
  • Use StreamWriterpara escrever uma grande quantidade de texto em um arquivo de texto.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *