Ler e escrever em ficheiros

Concluído

Ler dados de ficheiros e escrever dados em ficheiros são conceitos centrais no .NET.

A Tailwind Traders precisa gravar o total de todos os arquivos de vendas individuais da loja em um novo arquivo e, em seguida, carregar o arquivo no sistema de vendas da empresa.

Aqui, você aprende a usar a File classe para ler e gravar em arquivos.

Leia dados de ficheiros

Os ficheiros são lidos através do método ReadAllText na classe File.

File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");

O objeto de devolução de ReadAllText é uma cadeia.

{
  "total": 22385.32
}

Analisar dados em ficheiros

Estes dados no formato de cadeia não são muito úteis. Continuam a ser apenas carateres, mas agora num formato que consegue ler. O utilizador quer a capacidade de analisar estes dados num formato que possa utilizar em programação.

Existem várias formas de analisar os ficheiros JSON com o .NET, incluindo uma biblioteca de comunidade conhecida como Json.NET.

Você pode adicionar o pacote Json.NET ao seu projeto usando o NuGet:

dotnet add package Newtonsoft.Json

Em seguida, adicione using Newtonsoft.Json ao topo do seu arquivo de classe:

using Newtonsoft.Json; 

E use o JsonConvert.DeserializeObject método:

var salesJson = File.ReadAllText($"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales.json");
var salesData = JsonConvert.DeserializeObject<SalesTotal>(salesJson);

Console.WriteLine(salesData.Total);

class SalesTotal
{
  public double Total { get; set; }
}

Gorjeta

Os ficheiros existem em vários formatos. Os ficheiros JSON são os mais aconselháveis para trabalhar, devido ao suporte incorporado na linguagem. Também poderá encontrar ficheiros que sejam .csv, de largura fixa ou algum outro formato. Nesse caso, é melhor procurar um analisador para esse tipo de ficheiro em nuget.org.

Escreva dados em ficheiros

Você aprendeu a escrever arquivos no exercício anterior; é só que você escreveu um vazio. Para escrever dados num ficheiro, utilize o mesmo método WriteAllText, mas introduza os dados que pretende escrever.

var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);

File.WriteAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", data.Total.ToString());

// totals.txt
// 22385.32

Acrescente dados a ficheiros

No exemplo anterior, o ficheiro é substituído sempre que escreve no mesmo. Às vezes, você não quer isso. Você deseja acrescentar dados ao arquivo em vez de substituí-lo completamente. Pode acrescentar dados com o método File.AppendAllText. Por padrão, File.AppendAllText cria o arquivo se ele ainda não existir.

var data = JsonConvert.DeserializeObject<SalesTotal>(salesJson);

File.AppendAllText($"salesTotalDir{Path.DirectorySeparatorChar}totals.txt", $"{data.Total}{Environment.NewLine}");

// totals.txt
// 22385.32
// 22385.32

Gorjeta

No exemplo de código anterior, Environment.NewLine solicita que o .NET coloque o valor em sua própria linha. Se não tivesse introduzido este valor, obteria todos os números concentrados na mesma linha.

No próximo exercício, irá concluir o projeto de totais de vendas para a Tailwind Traders ao ler todos os ficheiros de vendas e escrever o total geral num ficheiro txt. O sistema de comércio da empresa pode então processar o ficheiro.