Читання Файлів За Допомогою StreamReader
Свайпніть щоб показати меню
Ви можете відкривати та читати файли за допомогою мови програмування C#.
Для читання файлу створюється новий об'єкт StreamReader. Об'єкт StreamReader приймає шлях до файлу.
Термін "об'єкт" стане зрозумілішим у наступних розділах, однак для розуміння — об'єкт це просто екземпляр певного типу даних, а StreamReader є типом даних так само, як і int чи float. Тому значення 1, 2.5f та "Hello World" технічно можна назвати "об'єктами" типів даних int, float та string відповідно.
index.cs
1StreamReader fileVarName = new StreamReader(fullPath);
Тут fileVarName позначає ім'я змінної, у якій буде збережено об'єкт StreamReader, а fullPath — це повний шлях до файлу у вигляді рядка.
Наприклад, можна відкрити файл "text.txt" на Робочому столі, який має шлях C:/Users/Admin/Desktop/text.txt:
index.cs
1StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Також можна використати неявне оголошення, щоб зробити синтаксис трохи коротшим: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Розгляньте файл text.txt, який містить наступний вміст:
text.txt
12345This is some example text
Об'єкт StreamReader має метод ReadLine, який зчитує один рядок з файлу та повертає його:
index.cs
1234var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);
Вивід:
This
Метод ReadLine автоматично переміщує курсор на наступний рядок, тому при повторному виклику він зчитує наступний рядок, якщо такий існує, інакше повертає null (нічого):
index.cs
12345678var 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
12345678var 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
12int a; Console.WriteLine(a = 7);
Вивід:
7
Виводиться 7, оскільки вираз a = 7 повертає 7, тобто значення, яке присвоюється змінній a.
Цю властивість можна використати для цікавих рішень, наприклад, присвоїти одне й те саме значення кільком змінним в одному виразі:
index.cs
123456789int 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
1234567var 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
123456789var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат