Чтение из файла windows forms c

В программе продемонстрировано использование классов StreamWriter и StreamReader для чтения и записи текстовых файлов. Также в программе использованы элементы управления (компоненты) RichTextBox и OpenFileDialog.


Содержание

  • Условие задачи
  • Выполнение
    • 1. Запустить MS Visual Studio. Создать проект по шаблону Windows Forms Application
    • 2. Разработка формы приложения
    • 3. Элемент управления OpenFileDialog
    • 4. Добавление внутренних переменных в текст приложения
    • 5. Программирование события Load класса формы Form1
    • 6. Импорт пространства имен System.IO
    • 7. Программирование события клика на кнопке button1 («Открыть файл…»)
    • 8. Программирование события изменения текста в компоненте RichTextEdit
    • 9. Программирование события клика на кнопке “Сохранить файл”

Поиск на других ресурсах:

Условие задачи

Разработать программу чтения/записи текстовых файлов. В программе должна быть возможность выбора файла для чтения, его корректировка и запись этого файла на диск.

  ⇑

Выполнение

1. Запустить MS Visual Studio. Создать проект по шаблону Windows Forms Application

Подробный пример создания приложения по шаблону Windows Forms Application подробно описывается здесь.

  ⇑

2. Разработка формы приложения

Создать форму как показано на рисунке 1.

На форме размещаются следующие элементы управления:

  • два элемента управления типа Button. Автоматически будут созданы два объекта (экземпляры класса Button) с именами button1 и button2;
  • один элемент управления типа RichTextBox. Автоматически создается объект с именем richTextBox1;
  • элемент управления типа Label. Создается объект с именем label1.

C# Windows Forms. Элементы управления формы приложенияРис. 1. Элементы управления формы приложения

Осуществить настройку элементов управления типа Button следующим образом:

  • в элементе управления button1 свойство Text = “Открыть файл …»;
  • в элементе управления button2 свойство Text = “Сохранить файл».

Настройка формы приложения Form1:

  • свойство Text = “Чтение/запись текстовых файлов”;
  • свойство MaximizeBox = false (кнопка развертывания на весь экран становится неактивной);
  • свойство FormBorderStyle = “Fixed3D”;
  • свойство StartPosition = “CenterScreen”.

Также нужно откорректировать размеры формы и элементов управления на форме приблизительно так, как показано на рисунке 2.

В элементе управления RichTextBox (рис. 3):

  • свойство WordWrap = «false» (перенос длинных строк в пределах границ окна редактора).

Элемент управления RichTextBox представляет собой многострочное редактированное текстовое поле, которое работает с текстом в формате RTF (Rich Text Format – расширенный текстовый формат). Текст формата RTF сохраняет дополнительную служебную информацию, которая управляет свойствами каждого абзаца и изменением шрифта по ходу текста.

C# Windows Forms Форма приложенияРис. 2. Форма приложения после корректировки и настройки свойств

C# Windows Forms Элемент управления RichTextBox

Рис. 3. Элемент управления типа RichTextBox

  ⇑

3. Элемент управления OpenFileDialog

Для того, чтобы выбрать текстовый файл для чтения, нужно использовать элемент управления типа OpenFileDialog. Этот элемент управления представляет собой стандартное диалоговое окно Windows, предназначенное для открытия файлов.

Разместить на форме компонент OpenFileDialog (рис. 4).

C# Windows Forms Элемент управления OpenFileDialogРис. 4. Элемент управления OpenFileDialog

  ⇑

4. Добавление внутренних переменных в текст приложения

Для работы программы нужно ввести следующие дополнительные внутренние переменные:

  • f_open – определяет, выбрал ли пользователь файл командой «Открыть файл…»;
  • f_save – определяет, был ли сохранен ранее открытый файл (f_open = true).

Поэтому, в текст модуля “Form1.cs” нужно ввести следующий код:

...

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        bool f_open, f_save; // определяют выбор файла и его сохранение

        public Form1()
        {
            InitializeComponent();
        }
    }
}

...

  ⇑

5. Программирование события Load класса формы Form1

Событие Load возникает в момент загрузки формы сразу после запуска приложения на выполнение. В обработчик события целесообразно включать начальную инициализацию переменных.

В данном случае, начальной инициализации подлежат такие переменные и объекты как f_open, f_save, label1, richTextBox1.

В компоненте label1 будет отображаться путь к выбранному файлу. В компоненте richTextBox1 будет отображаться содержимое (текст) выбранного файла.



Листинг обработчика Form1_Load() события Load загрузки формы следующий:

private void Form1_Load(object sender, EventArgs e)
{
  f_open = false; // файл не открыт
  f_save = false;
  label1.Text = "-";
  richTextBox1.Text = "";
}

  ⇑

6. Импорт пространства имен System.IO

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

Поэтому, для использования методов этих классов, нужно в начале кода модуля “Form1.cs” добавить строку:

using System.IO;

Таким образом, верхняя часть файла “Form1.cs” имеет вид:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

  ⇑

7. Программирование события клика на кнопке button1 (“Открыть файл…»)

Для вызова стандартного окна Windows выбора файла, пользователь должен выбрать команду «Открыть файл…» (button1). Пример программирования события клика на кнопке button1 подробно описан здесь.

Листинг обработчика button1_Click() события Click кнопки button1, осуществляющей открытие окна выбора файла, следующий:

private void button1_Click(object sender, EventArgs e)
{
  // 1. Открытие окна и проверка, выбран ли файл
  if (openFileDialog1.ShowDialog() == DialogResult.OK)
  {
    // 2. Вывести имя файла на форме в компоненте label1
    label1.Text = openFileDialog1.FileName;

    // 3. Установить флажки f_open и f_save
    f_open = true;
    f_save = false;

    // 4. Прочитать файл в richTextBox1
    // очистить предыдущий текст в richTextBox1
    richTextBox1.Clear();

    // 5. Создать объект класса StreamReader и прочитать данные из файла
    StreamReader sr = File.OpenText(openFileDialog1.FileName);

    // дополнительная переменная для чтения строки из файла
    string line = null;
    line = sr.ReadLine(); // чтение первой строки

    // 6. Цикл чтения строк из файла, если строки уже нет, то line=null
    while (line != null)
    {
      // 6.1. Добавить строку в richTextBox1
      richTextBox1.AppendText(line);

      // 6.2. Добавить символ перевода строки
      richTextBox1.AppendText("\r\n");

      // 6.3. Считать следующую строку
      line = sr.ReadLine();
    }

    // 7. Закрыть соединение с файлом
    sr.Close();
  }
}

Для вызова стандартного окна Windows выбора файла используется метод ShowDialog() компонента openFileDialog1. Выбранный файл сохраняется в свойства FileName объекта openFileDialog.

Для чтения текстового файла используется класс StreamReader, который осуществляет чтение символьных данных из файла. Чтобы создать экземпляр класса StreamReader используется метод OpenText() класса File. Класс File содержит ряд методов, которые хорошо подходят для упрощенного чтения символьных данных.

Чтобы считать строку из файла в программе используется метод ReadLine(), считывающий строку символов из текущего потока и возвращающий данные в виде строки. Если достигнут конец файла, то метод возвращает null.

Чтение строк осуществляется в локальную переменную line.

Чтобы добавить строку к объекту richTextBox1, используется метод AppendText().

  ⇑

8. Программирование события изменения текста в компоненте RichTextEdit

В соответствии с логикой программы, если в тексте файла происходят изменения, то флажок f_save должен быть равен значению false.

В компоненте richTextBox1 есть событие TextChanged, которое вызывается в момент изменения текста в редакторе (рис. 5).

C# Windows Forms Событие TextChanged элемент управлени richTextBox1Рис. 5. Событие TextChanged элемента управления richTextBox1

Обработчик события TextChanged имеет следующий вид:

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
  f_save = false;
}

  ⇑

9. Программирование события клика на кнопке “Сохранить файл

Для сохранения измененного текста в файле нужно выбрать команду «Сохранить файл» (кнопка button2). Для сохранения измененного в richTextBox1 файла используются методы класса StreamWriter.

Листинг обработчика события клика на кнопке button2 следующий:

private void button2_Click(object sender, EventArgs e)
{
  // 1. Проверка, открыт ли файл
  if (!f_open) return;

  // 2. Если файл открыт, то проверка – сохранен ли он
  if (f_save) return;

  // 3. Создание объекта типа StreamWriter и получение строчных данных
  StreamWriter sw = File.CreateText(openFileDialog1.FileName);

  // 4. Чтение строк с richTextBox1 и добавление их в файл
  string line;
  for (int i = 0; i < richTextBox1.Lines.Length; i++)
  {
    // 4.1. Чтение одной строки
    line = richTextBox1.Lines[i].ToString();

    // 4.2. Добавление этой строки в файл
    sw.WriteLine(line);
  }

  // 5. Закрыть объект sw
  sw.Close();
}

Объясним некоторые фрагменты кода.

В обработчике события button2_Click после проверки на наличие открытого файла создается объект (переменная) с именем sw типа StreamWriter.

При создании объекта используется метод CreateText() из типа File, возвращающего экземпляр типа StreamWriter. Имя файла сохраняется в свойстве openFileDialog1.FileName.

Для доступа к введенным строкам компонента richTextBox используется свойство Lines, которое есть массивом строк.

Чтобы добавить одну строку, нужно вызвать метод WriteLine() объекта sw типа StreamWriter.

  ⇑


Связанные темы

  • C#. Пример создания приложения копирования файлов. Класс FileStream
  • Пример разработки приложения демонстрации работы списков и ассоциативных массивов. Классы Dictionary, List, StreamReader

  ⇑


I am new to the OpenFileDialog function, but have the basics figured out. What I need to do is open a text file, read the data from the file (text only) and correctly place the data into separate text boxes in my application. Here’s what I have in my «open file» event handler:

private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
    OpenFileDialog theDialog = new OpenFileDialog();
    theDialog.Title = "Open Text File";
    theDialog.Filter = "TXT files|*.txt";
    theDialog.InitialDirectory = @"C:\";
    if (theDialog.ShowDialog() == DialogResult.OK)
    {
        MessageBox.Show(theDialog.FileName.ToString());
    }
}

The text file I need to read is this (for homework, I need to read this exact file), It has an employee number, name, address, wage, and hours worked:

1
John Merryweather
123 West Main Street
5.00 30

In the text file I was given, there are 4 more employees with info immediately after this in the same format. You can see that the employee wage and hours are on the same line, not a typo.

I have an employee class here:

public class Employee
{
    //get and set properties for each 
    public int EmployeeNum { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public double Wage { get; set; }
    public double Hours { get; set; }

    public void employeeConst() //constructor method
    {
        EmployeeNum = 0;
        Name = "";
        Address = "";
        Wage = 0.0;
        Hours = 0.0;
    }

    //Method prologue
    //calculates employee earnings
    //parameters: 2 doubles, hours and wages
    //returns: a double, the calculated salary
    public static double calcSalary(double h, double w)
    {
        int OT = 40;
        double timeandahalf = 1.5;
        double FED = .20;
        double STATE = .075;
        double OThours = 0;
        double OTwage = 0;
        double OTpay = 0;
        double gross = 0; ;
        double net = 0;
        double net1 = 0;
        double net2 = 0;
        if (h > OT)
        {
            OThours = h - OT;
            OTwage = w * timeandahalf;
            OTpay = OThours * OTwage;
            gross = w * h;
            net = gross + OTpay;
        }
        else
        {
            net = w * h;
        }

        net1 = net * FED; //the net after federal taxes
        net2 = net * STATE; // the net after state taxes

        net = net - (net1 + net2);
        return net; //total net
    }
}

So I need to pull the text from that file into my Employee class, then output the data to the correct textbox in the windows forms application. I am having trouble understanding how to do this right. Do I need to use a streamreader? Or is there another, better way in this instance? Thank you.

Последнее обновление: 20.02.2022

Для работы непосредственно с текстовыми файлами в пространстве System.IO определены специальные
классы: StreamReader и StreamWriter.

Запись в файл и StreamWriter

Для записи в текстовый файл используется класс StreamWriter. Некоторые из его конструкторов, которые могут применяться для создания объекта
StreamWriter:

  • StreamWriter(string path): через параметр path передается путь к файлу, который будет связан с потоком

  • StreamWriter(string path, bool append): параметр append указывает, надо ли добавлять в конец файла данные или же перезаписывать файл.
    Если равно true, то новые данные добавляются в конец файла. Если равно false, то файл перезаписываетсяя заново

  • StreamWriter(string path, bool append, System.Text.Encoding encoding): параметр encoding указывает на кодировку, которая будет
    применяться при записи

Свою функциональность StreamWriter реализует через следующие методы:

  • int Close(): закрывает записываемый файл и освобождает все ресурсы

  • void Flush(): записывает в файл оставшиеся в буфере данные и очищает буфер.

  • Task FlushAsync(): асинхронная версия метода Flush

  • void Write(string value): записывает в файл данные простейших типов, как int, double, char, string и т.д. Соответственно имеет ряд перегруженных
    версий для записи данных элементарных типов, например, Write(char value), Write(int value), Write(double value) и т.д.

  • Task WriteAsync(string value): асинхронная версия метода Write. Обратите внимание, что асинхронные версии есть не для всех перегрузок метода Write.

  • void WriteLine(string value): также записывает данные, только после записи добавляет в файл символ окончания строки

  • Task WriteLineAsync(string value): асинхронная версия метода WriteLine

Рассмотрим запись в файл на примере:

string path = "note1.txt";
string text = "Hello World\nHello METANIT.COM";

// полная перезапись файла 
using (StreamWriter writer = new StreamWriter(path, false))
{
    await writer.WriteLineAsync(text);
}
// добавление в файл
using (StreamWriter writer = new StreamWriter(path, true))
{
    await writer.WriteLineAsync("Addition");
    await writer.WriteAsync("4,5");
}

В данном случае два раза создаем объект StreamWriter. В первом случае если файл существует, то он будет перезаписан. Если не существует, он будет создан.
И в нее будет записан текст из переменной text. Во втором случае файл открывается для дозаписи, и будут записаны атомарные данные — строка и число.

По завершении в папке программы мы сможем найти файл note.txt, который будет иметь следующие строки:

Hello World
Hello METANIT.COM
Addition
4,5

В пример выше будет использоваться кодировка по умолчанию. но также можно задать ее явным образом:

using (StreamWriter writer = new StreamWriter(path, true, System.Text.Encoding.Default))
{
    // операции с writer
}

Чтение из файла и StreamReader

Класс StreamReader позволяет нам легко считывать весь текст или отдельные строки из текстового файла.

Некоторые из конструкторов класса StreamReader:

  • StreamReader(string path): через параметр path передается путь к считываемому файлу

  • StreamReader(string path, System.Text.Encoding encoding): параметр encoding задает кодировку для чтения файла

Среди методов StreamReader можно выделить следующие:

  • void Close(): закрывает считываемый файл и освобождает все ресурсы

  • int Peek(): возвращает следующий доступный символ, если символов больше нет, то возвращает -1

  • int Read(): считывает и возвращает следующий символ в численном представлении. Имеет перегруженную версию:
    Read(char[] array, int index, int count), где array — массив, куда считываются символы, index — индекс в массиве array,
    начиная с которого записываются считываемые символы, и count — максимальное количество считываемых символов

  • Task<int> ReadAsync(): асинхронная версия метода Read

  • string ReadLine(): считывает одну строку в файле

  • string ReadLineAsync(): асинхронная версия метода ReadLine

  • string ReadToEnd(): считывает весь текст из файла

  • string ReadToEndAsync(): асинхронная версия метода ReadToEnd

Сначала считаем текст полностью из ранее записанного файла:

string path = "note1.txt";
// асинхронное чтение
using (StreamReader reader = new StreamReader(path))
{
    string text = await reader.ReadToEndAsync();
    Console.WriteLine(text);
}

Считаем текст из файла построчно:

string path = "/Users/eugene/Documents/app/note1.txt";

// асинхронное чтение
using (StreamReader reader = new StreamReader(path))
{
	string? line;
	while ((line = await reader.ReadLineAsync()) != null)
	{
		Console.WriteLine(line);
	}
}

В данном случае считываем построчно через цикл while: while ((line = await reader.ReadLineAsync()) != null) — сначала присваиваем переменной line результат функции
reader.ReadLineAsync(), а затем проверяем, не равна ли она null. Когда объект sr дойдет до конца файла и больше строк не останется, то
метод reader.ReadLineAsync() будет возвращать null.

This post shows you How to Read and Write text file using StreamWriter and StreamReader in C# .NET Windows Forms Application.

Read and write text file in c# windows application

Dragging TextBox and Button controls from your Visual Studio Toolbox to your form designer, then create a simple user interface allows you to read and write text file in c#.

c# read write text file

Right-clicking on your TextBox control, then select Properties. Next, set the Multiline of TextBox control to True.

C# Read text file line by line

Adding a click event handler to the Read button allows you to read a text file in c#.

//how to read a text file in c# windows forms application
private void btnRead_Click(object sender, EventArgs e)
{
    using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text files|*.txt" })
    {
        if (ofd.ShowDialog() == DialogResult.OK)
        {
            using (StreamReader read = new StreamReader(ofd.FileName))
            {
                while (true)
                {
                    string line = read.ReadLine();
                    if (line == null)
                        break;
                    txtText.Text = line;
                }
            }
        }
    }
}

C# Write string to file

Adding a click event handler to the Write button allows you to write data from the TextBox control to text file.

private void btnWrite_Click(object sender, EventArgs e)
{
    using (SaveFileDialog sfd = new SaveFileDialog() { Filter = "Text files|*.txt" })
    {
        if (sfd.ShowDialog() == DialogResult.OK)
        {
            using (StreamWriter write = new StreamWriter(sfd.FileName, true, Encoding.UTF8))
            {
                write.WriteLine(txtText.Text);
            }
        }
    }
}

You can write a text file with Encoding, It’s automatically create and write text file in c#.

C# Write to file append

StreamWriter write = new StreamWriter(sfd.FileName, true, Encoding.UTF8);

Through this c# example, I hope so you can use StreamReader and StreamWrite class to read and write text file in c# windows application.

Related Posts

    В разработке приложений Windows Forms одной из важных задач является работа с файлами. Это может быть загрузка и сохранение данных, чтение и запись в текстовые или двоичные файлы, а также манипуляции с файловой системой. В данной статье мы рассмотрим основные примеры и техники работы с файлами в Windows Forms.

    Для работы с файлами в Windows Forms используется класс System.IO. Данный класс предоставляет набор методов и свойств для работы с файлами и директориями. Он позволяет создавать, перемещать, копировать и удалять файлы, а также выполнять другие операции с файловой системой.

    Примером одной из базовых операций является чтение и запись текстовых файлов. Для этого используется класс StreamReader и StreamWriter. С помощью StreamReader мы можем открыть файл для чтения и последовательно считывать его содержимое. StreamWriter позволяет открыть файл для записи и последовательно записывать в него данные.

    Например, для чтения файла мы создаем экземпляр класса StreamReader, указываем путь к файлу и вызываем метод ReadLine(), который считывает одну строку (до перевода строки) из файла.

    Для работы с бинарными данными, такими как изображения, аудио или видео файлы, используется класс BinaryReader и BinaryWriter. Они позволяют считывать и записывать данные в двоичном формате. Например, с помощью BinaryReader мы можем считать содержимое файла в виде массива байтов, а с помощью BinaryWriter записать данные в файл в двоичном формате.

    Основы работы с файлами в Windows Forms

    Для работы с файлами в Windows Forms используется класс System.IO.File, который предоставляет методы для создания, открытия, чтения и записи файлов. Сначала необходимо установить пространство имен System.IO, чтобы использовать этот класс:

    • Используйте System.IO для доступа к классу File.

    Одним из первых шагов при работе с файлами — проверка их наличия. Метод File.Exists() позволяет проверить, существует ли файл с указанным путем:

    • Используйте метод File.Exists(path), чтобы проверить, существует ли файл по указанному пути.

    Для создания нового файла используется метод File.Create(), который создает файл с указанным путем:

    • Используйте метод File.Create(path), чтобы создать новый файл по указанному пути.

    Чтение информации из файла осуществляется с помощью метода File.ReadAllText(), который возвращает содержимое файла в виде строки:

    • Используйте метод File.ReadAllText(path), чтобы прочитать содержимое файла по указанному пути.

    Запись данных в файл может быть выполнена с помощью метода File.WriteAllText(), который записывает указанную строку в файл:

    • Используйте метод File.WriteAllText(path, contents), чтобы записать указанную строку в файл по указанному пути.

    Также существует возможность записи данных в файл построчно с помощью метода File.WriteAllLines(). Этот метод принимает массив строк и записывает каждую строку в отдельную строку файла:

    • Используйте метод File.WriteAllLines(path, lines), чтобы записать массив строк в файл по указанному пути.

    Кроме того, класс File предлагает ряд других методов для работы с файлами, таких как копирование, перемещение, удаление файлов и т.д.

    Операции с файлами могут вызывать исключения, поэтому рекомендуется использовать конструкцию try-catch для обработки возможных ошибок при работе с файлами.

    В заключение, работа с файлами в Windows Forms — это неотъемлемая часть разработки приложений. Знание основных методов класса File позволяет эффективно работать с файлами и выполнять различные операции с ними.

    Открытие файлов для чтения и записи

    Для открытия файла для чтения в Windows Forms можно использовать класс FileStream. Процесс чтения файла состоит из следующих шагов:

    1. Создание объекта FileStream с указанием имени и пути к файлу, а также режима доступа (FileMode.Open).
    2. Создание объекта StreamReader, который будет использоваться для чтения данных из файла.
    3. Использование методов объекта StreamReader для чтения данных из файла.
    4. Закрытие потока чтения и освобождение ресурсов.

    Пример открытия файла для чтения с использованием класса StreamReader:

    string filePath = "C:\\example.txt";
    using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
    {
    using (StreamReader streamReader = new StreamReader(fileStream))
    {
    string line;
    while ((line = streamReader.ReadLine()) != null)
    {
    // Обработка строки файла
    }
    }
    }

    Для открытия файла для записи в Windows Forms также используется класс FileStream. Процесс записи в файл включает следующие шаги:

    1. Создание объекта FileStream с указанием имени и пути к файлу, а также режима доступа (FileMode.Create или FileMode.Append).
    2. Создание объекта StreamWriter, который будет использоваться для записи данных в файл.
    3. Использование методов объекта StreamWriter для записи данных в файл.
    4. Закрытие потока записи и освобождение ресурсов.

    Пример открытия файла для записи с использованием класса StreamWriter:

    string filePath = "C:\\example.txt";
    using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
    {
    using (StreamWriter streamWriter = new StreamWriter(fileStream))
    {
    streamWriter.WriteLine("Пример записи в файл");
    }
    }

    Однако при использовании класса StreamWriter данные записываются во внутренний буфер, и чтобы гарантировать запись данных в файл, необходимо явно вызвать метод Flush или закрыть поток записи.

    При работе с файлами важно учитывать возможные исключения, которые могут возникнуть при открытии файлов. Например, если файл не существует, может быть сгенерировано исключение FileNotFoundException, которое необходимо обработать.

    Описание всех возможных исключений связанных с открытием и работой с файлами вы можете найти в официальной документации.

    В данном разделе были рассмотрены основы работы с файлами в Windows Forms. Необходимые классы и методы помогут вам успешно открывать файлы для чтения и записи данных в своих приложениях.

  • Читалка книг для windows 10 pdf
  • Чистка папки appdata в windows 10
  • Чтение дампа памяти windows 10
  • Что будет если активировать windows 10 про
  • Чистый образ windows 7 ultimate скачать торрент