Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Читання Файлів За Допомогою StreamReader | Структури Даних та Робота з Файлами
C# Понад Базовий Рівень

bookЧитання Файлів За Допомогою StreamReader

Ви можете відкривати та читати файли за допомогою мови програмування C#.

Для читання файлу створюється новий об'єкт StreamReader. Об'єкт StreamReader приймає шлях до файлу.

Note
Примітка

Термін "об'єкт" стане зрозумілішим у наступних розділах, однак для розуміння — об'єкт це просто екземпляр певного типу даних, а StreamReader є типом даних так само, як і int чи float. Тому значення 1, 2.5f та "Hello World" технічно можна назвати "об'єктами" типів даних int, float та string відповідно.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Тут fileVarName позначає ім'я змінної, у якій буде збережено об'єкт StreamReader, а fullPath — це повний шлях до файлу у вигляді рядка.

Наприклад, можна відкрити файл "text.txt" на Робочому столі, який має шлях C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
Примітка

Також можна використати неявне оголошення, щоб зробити синтаксис трохи коротшим: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Розгляньте файл text.txt, який містить наступний вміст:

text.txt

text.txt

copy
12345
This is some example text

Об'єкт StreamReader має метод ReadLine, який зчитує один рядок з файлу та повертає його:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

Вивід:

This

Метод ReadLine автоматично переміщує курсор на наступний рядок, тому при повторному виклику він зчитує наступний рядок, якщо такий існує, інакше повертає null (нічого):

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

Вивід:

This
is
some
example
text

Для зчитування всіх рядків з файлу можна використати цикл while з умовою, яка перевіряє, чи наступний рядок не є null. Нижче наведено простий спосіб, як це зробити:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

Вивід:

This
is
some
example
text

Ви можете зробити наведений вище код трохи акуратнішим, використовуючи певний прийом. Для цього розглянемо оператори присвоєння. Оператор присвоєння також має значення, яке повертається, і це значення, яке присвоюється. Це можна зрозуміти на прикладі:

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

Вивід:

7

Виводиться 7, оскільки вираз a = 7 повертає 7, тобто значення, яке присвоюється змінній a.

Цю властивість можна використати для цікавих рішень, наприклад, присвоїти одне й те саме значення кільком змінним в одному виразі:

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

Вивід:

9
9
9

Використовуючи цю інформацію, можна змінити код для читання файлів, зробивши його коротшим шляхом видалення зайвих рядків коду:

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

Усередині умови спочатку використовується оператор присвоєння line = textFile.ReadLine(), який автоматично оновлює змінну line, а потім перевіряє, чи є вона null, за значенням, яке повертає оператор.

Після зчитування файлу його також необхідно закрити за допомогою методу Close, інакше це може призвести до витоку пам'яті або файл залишиться заблокованим і недоступним для інших процесів, поки програма працює.

Кінцевий код виглядатиме так:

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

Натисніть або перетягніть елементи та заповніть пропуски

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 6

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Can you explain how the assignment inside the while loop works?

What happens if I forget to close the StreamReader?

Can you show how to handle errors when reading a file?

Awesome!

Completion rate improved to 2.04

bookЧитання Файлів За Допомогою StreamReader

Свайпніть щоб показати меню

Ви можете відкривати та читати файли за допомогою мови програмування C#.

Для читання файлу створюється новий об'єкт StreamReader. Об'єкт StreamReader приймає шлях до файлу.

Note
Примітка

Термін "об'єкт" стане зрозумілішим у наступних розділах, однак для розуміння — об'єкт це просто екземпляр певного типу даних, а StreamReader є типом даних так само, як і int чи float. Тому значення 1, 2.5f та "Hello World" технічно можна назвати "об'єктами" типів даних int, float та string відповідно.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Тут fileVarName позначає ім'я змінної, у якій буде збережено об'єкт StreamReader, а fullPath — це повний шлях до файлу у вигляді рядка.

Наприклад, можна відкрити файл "text.txt" на Робочому столі, який має шлях C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
Примітка

Також можна використати неявне оголошення, щоб зробити синтаксис трохи коротшим: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Розгляньте файл text.txt, який містить наступний вміст:

text.txt

text.txt

copy
12345
This is some example text

Об'єкт StreamReader має метод ReadLine, який зчитує один рядок з файлу та повертає його:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

Вивід:

This

Метод ReadLine автоматично переміщує курсор на наступний рядок, тому при повторному виклику він зчитує наступний рядок, якщо такий існує, інакше повертає null (нічого):

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

Вивід:

This
is
some
example
text

Для зчитування всіх рядків з файлу можна використати цикл while з умовою, яка перевіряє, чи наступний рядок не є null. Нижче наведено простий спосіб, як це зробити:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

Вивід:

This
is
some
example
text

Ви можете зробити наведений вище код трохи акуратнішим, використовуючи певний прийом. Для цього розглянемо оператори присвоєння. Оператор присвоєння також має значення, яке повертається, і це значення, яке присвоюється. Це можна зрозуміти на прикладі:

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

Вивід:

7

Виводиться 7, оскільки вираз a = 7 повертає 7, тобто значення, яке присвоюється змінній a.

Цю властивість можна використати для цікавих рішень, наприклад, присвоїти одне й те саме значення кільком змінним в одному виразі:

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

Вивід:

9
9
9

Використовуючи цю інформацію, можна змінити код для читання файлів, зробивши його коротшим шляхом видалення зайвих рядків коду:

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

Усередині умови спочатку використовується оператор присвоєння line = textFile.ReadLine(), який автоматично оновлює змінну line, а потім перевіряє, чи є вона null, за значенням, яке повертає оператор.

Після зчитування файлу його також необхідно закрити за допомогою методу Close, інакше це може призвести до витоку пам'яті або файл залишиться заблокованим і недоступним для інших процесів, поки програма працює.

Кінцевий код виглядатиме так:

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

Натисніть або перетягніть елементи та заповніть пропуски

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 6
some-alt