Resumo : neste tutorial, você aprenderá várias técnicas para escrever arquivos de texto em C# usando File
métodos estáticos e StreamWriter
classes.
Escrevendo todo o texto em um arquivo de texto
O
método cria um novo arquivo, grava o conteúdo nele e fecha o arquivo:File.WriteAllText
()
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
o método para escrever todo o texto em um arquivo de texto:File.WriteAllText
()
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.txt
parecido com o seguinte:
Hello
Goodbye
Linguagem de código: C# ( cs )
Este programa grava as strings “Hello” e “Goodbye” no readme.txt
arquivo 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.txt
localizado no C:\temp1
diretório. Como o diretório C:\temp1
não existe, o programa mostra uma mensagem fornecida pelo DirectoryNotFoundException
objeto:
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
método como este:File.Exists
()
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 exists
Linguagem 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
método. O
()File.WriteAllLines
método cria um novo arquivo, grava uma ou mais strings no arquivo e depois fecha o arquivo:
()File.WriteAllLines
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.txt
arquivo ficará assim:
Hello
Hi
Hey
Linguagem 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.txt
onde 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 FileStream
objeto chamado fs que abra o arquivo especificado pelo caminho com o modo FileMode
.Open.
Depois disso, crie um StreamWriter
objeto que grave texto no arquivo usando o FileStream
objeto.
Por fim, itere o array de saudações e escreva cada elemento no arquivo usando o StreamWriter
objeto.
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 async
versões dos métodos WriteAllText
e :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 await
do método.WriteAllLinesAsync()
Resumo
- Use o
método para escrever todo o texto em um arquivo de texto.File.WriteAllText
() - Use o
método para gravar dados de texto em um arquivo de texto de forma assíncrona.File.WriteAllTextAsync
() - Use o
método para escrever uma matriz de strings em um arquivo de texto.File.WriteAllLines
() - Use o
método para escrever uma matriz de strings em um arquivo de texto de forma assíncrona.File.WriteAllLinesAsync
() - Use
StreamWriter
para escrever uma grande quantidade de texto em um arquivo de texto.