Вопрос задан 04.10.2023 в 03:02. Предмет Информатика. Спрашивает Гималиев Серёжа.

Считывание/запись файла в С#. Пример с описанием​

0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Шмакова Ліза.

Для чтения/записи файлов в C# можно использовать несколько подходов в зависимости от задачи. Например, если нужно вывести весь текст из файла в консоль - можно использовать File.ReadAllText(). Если же нужно форматировать каждую строку файла или, например, необходимо считывать текст файла по одному символу - можно использовать StreamReader. Разумеется, считывать с файла можно не только сплошной текст. Это могут быть байты, отдельные строки; опять же в зависимости от задачи. Аналогичная ситуация с записью в файл. Для записи используем File.WriteAllBytes() или StreamWriter. Классы File, StreamReader, StreamWriter и др. находятся в пространстве имен System.IO. Обязательно напишите строку кода: using System.IO; или обращайтесь к классу так: System.IO.File.ReadAllLines(); Также хочу сразу предотвратить возможную ошибку: если вы открываете файл для записи/чтения, не забудьте освободить ресурсы. Иначе файл так и останется открытым, и если к нему еще раз обратиться, то будет ошибка.  Для этого закрывайте файл или освобождайте ресурсы вручную: File.Create().Close(); или reader.Dispose(); Но есть возможность делать это автоматически. Для этого нужно использовать using как в моем коде.

Для наглядности привожу пример программы. Задача: считать из файла имена людей и записать в другой файл отсортированный список. Затем взять сообщение из файла, закодировать, поместить закодированное сообщение в файл. Получить из файла закодированное сообщение, расшифровать и вывести в консоль. Для решения использовал основные приемы для чтения/записи файла. Также сделал краткие комментарии. Надеюсь, всё было понятно. Поскольку в ответе код скорее всего отформатируется криво, прикрепил фотографию с "красивым" кодом, а также фотографию входных и выходных файлов.

Код:

using System;

using System.IO;

using System.Text;

using System.Collections.Generic;

namespace ConsoleApp1

{

   internal class Program

   {

       private static void Main(string[] args)

       {

           //Путь к входным и выходным файлам.

           const string inputPath1 = @"D:\ProgramsTester\Input1.txt";

           const string inputPath2 = @"D:\ProgramsTester\Input2.txt";

           const string outputPath1 = @"D:\ProgramsTester\Output1.txt";

           const string outputPath2 = @"D:\ProgramsTester\Output2.txt";

           //Список.

           List<string> items = new List<string>();

           //Использует StreamReader, а затем высвобождает ресурсы.

           using (StreamReader reader = new StreamReader(inputPath1))

           {

               //Читает весь файл.

               while (!reader.EndOfStream)

               {

                   items.Add(reader.ReadLine());

               }

           }

           //Сортировка массива.

           items.Sort();

           //Использует StreamWriter, а затем высвобождает ресурсы.

           using (StreamWriter writer = new StreamWriter(outputPath1))

           {

               //Записывает отсортированный список в файл.

               for (int i = 0; i < items.Count; i++)

               {

                   writer.WriteLine(items[i]);

               }

           }

           //Байты из файла, хранящего сообщение, записываются в массив байт.

           byte[] fileBytes = File.ReadAllBytes(inputPath2);

           //Запись закодированного сообщения в файл.

           File.WriteAllText(outputPath2, Convert.ToBase64String(fileBytes));

           //Вывод декодированного сообщения, полученного из файла.

           Console.WriteLine("Decoded text: " + Encoding.Default.GetString(Convert.FromBase64String(File.ReadAllText(outputPath2))));

           _ = Console.ReadKey();

       }

   }

}



0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

В C# для считывания и записи файлов используются классы StreamReader и StreamWriter из пространства имен System.IO. Ниже приведен пример кода с описанием для считывания и записи текстового файла:

csharp
using System; using System.IO; class Program { static void Main() { // Указываем путь к файлу string filePath = "example.txt"; // Пример считывания файла ReadFile(filePath); // Пример записи файла WriteFile(filePath); Console.WriteLine("Операции завершены успешно."); } static void ReadFile(string filePath) { try { // Используем StreamReader для считывания файла using (StreamReader reader = new StreamReader(filePath)) { // Читаем файл построчно и выводим его содержимое Console.WriteLine("Содержимое файла:"); while (!reader.EndOfStream) { string line = reader.ReadLine(); Console.WriteLine(line); } } } catch (FileNotFoundException) { Console.WriteLine($"Файл {filePath} не найден."); } catch (Exception ex) { Console.WriteLine($"Ошибка при считывании файла: {ex.Message}"); } } static void WriteFile(string filePath) { try { // Используем StreamWriter для записи в файл using (StreamWriter writer = new StreamWriter(filePath, true)) // true указывает на дозапись файла { // Записываем строки в файл writer.WriteLine("Новая строка 1"); writer.WriteLine("Новая строка 2"); } } catch (Exception ex) { Console.WriteLine($"Ошибка при записи в файл: {ex.Message}"); } } }

В данном примере:

  1. ReadFile отвечает за считывание файла.
  2. WriteFile отвечает за запись в файл.
  3. Оба метода используют блок try/catch для обработки возможных ошибок, таких как отсутствие файла или ошибки ввода-вывода.
  4. using гарантирует, что ресурсы (StreamReader и StreamWriter) будут правильно освобождены после использования.

Обратите внимание, что код использования StreamWriter с параметром true для дозаписи к существующему файлу. Если файл не существует, он будет создан.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос