Как считать весь файл в строку c
Перейти к содержимому

Как считать весь файл в строку c

  • автор:

Как считать весь файл в строку c

Для работы непосредственно с текстовыми файлами в пространстве 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

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

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

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

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

Чтение из файла и 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 — максимальное количество считываемых символов

# File and Stream I/O

# Reading from a file using the System.IO.File class

(opens new window) function to read the entire contents of a file into a string.

You can also read a file as an array of lines using the System.IO.File.ReadAllLines

# Lazily reading a file line-by-line via an IEnumerable

When working with large files, you can use the System.IO.File.ReadLines method to read all lines from a file into an IEnumerable<string> . This is similar to System.IO.File.ReadAllLines , except that it doesn’t load the whole file into memory at once, making it more efficient when working with large files.

The second parameter of File.ReadLines is optional. You may use it when it is required to specify encoding.

It is important to note that calling ToArray , ToList or another similar function will force all of the lines to be loaded at once, meaning that the benefit of using ReadLines is nullified. It is best to enumerate over the IEnumerable using a foreach loop or LINQ if using this method.

# Writing lines to a file using the System.IO.StreamWriter class

Implements a TextWriter for writing characters to a stream in a particular encoding.

Using the WriteLine method, you can write content line-by-line to a file.

Notice the use of the using keyword which makes sure the StreamWriter object is disposed as soon as it goes out of scope and thus the file is closed.

Note that the StreamWriter can receive a second bool parameter in it’s constructor, allowing to Append to a file instead of overwriting the file:

# Writing to a file using the System.IO.File class

(opens new window) function to write a string to a file.

(opens new window) function which receives an IEnumerable<String> as the second parameter (as opposed to a single string in the previous example). This lets you write content from an array of lines.

# Copy File

File static class

File static class can be easily used for this purpose.

Remark: By this method, file is copied, meaning that it will be read from the source and then written to the destination path. This is a resource consuming process, it would take relative time to the file size, and can cause your program to freeze if you don’t utilize threads.

# Async write text to a file using StreamWriter

# Create File

File static class

By using Create method of the File static class we can create files. Method creates the file at the given path, at the same time it opens the file and gives us the FileStream of the file. Make sure you close the file after you are done with it.

FileStream class

There are many overloads of this classes constructor which is actually well documented here

(opens new window) . Below example is for the one that covers most used functionalities of this class.

You can check the enums for FileMode

(opens new window) from those links. What they basically means are as follows:

FileMode: Answers "Should file be created? opened? create if not exist then open?" kinda questions.

FileAccess: Answers "Should I be able to read the file, write to the file or both?" kinda questions.

FileShare: Answers "Should other users be able to read, write etc. to the file while I am using it simultaneously?" kinda questions.

# Move File

File static class

File static class can easily be used for this purpose.

Remark1: Only changes the index of the file (if the file is moved in the same volume). This operation does not take relative time to the file size.

Remark2: Cannot override an existing file on destination path.

# Delete File

While Delete does not throw exception if file doesn’t exist, it will throw exception e.g. if specified path is invalid or caller does not have the required permissions. You should always wrap calls to Delete inside try-catch block

(opens new window) and handle all expected exceptions. In case of possible race conditions, wrap logic inside lock statement

# Files and Directories

Get all files in Directory

Returns an array of FileInfo , representing all the files in the specified directory.

Get Files with specific extension

Returns an array of FileInfo , representing all the files in the specified directory with the specified extension.

Чтение текстового файла построчно на C#

Два самых простых способа как прочитать текстовый файл построчно на C#. В обоих случаях используется using System.IO;. Напишу сразу примеры кода без всяких прелюдий.

Способ 1

Классический вариант чтения файла построчно:

Еще один пример, как можно организовать цикл построчного чтения:

Указать кодировку при чтении файла (например, DOS-кодировку) можно так:

Так же можно использовать обёртку using чтобы не закрывать файл после чтения.

Как прочитать текстовый файл в C#

Как прочитать текстовый файл в C#

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

Чтение текстового файла

Класс File в C# определяет два статических метода для чтения текстового файла, а именно **File.ReadAllText() и File.ReadAllLines().

File.ReadAllText() сразу читает весь файл и возвращает строку. Нам нужно сохранить эту строку в переменной и использовать ее для отображения содержимого на экране.

File.ReadAllLines() читает файл по одной строке за раз и возвращает эту строку в строковом формате. Нам нужен массив строк для хранения каждой строки. Мы отображаем содержимое файла, используя тот же массив строк.

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

Создадим консольный проект в Visual Studio и пропишем в нем следующий код.

using System;
// пространство имен для с вводом
using System.IO;

class Program <
static void Main(string[] args)
<
// определите путь к текстовому файлу в вашей системе
string file = @"C:\Documents\Textfile.txt";

Console.WriteLine("Чтение файла с помощью File.ReadAllText()");

// Чтение всего файла за один раз
// Если файл существует
if (File.Exists(file)) <
// Чтение всего содержимого в одной строке
// и вывод его на экран
string str = File.ReadAllText(file);
Console.WriteLine(str);
>
Console.WriteLine();

Console.WriteLine("Чтение файла с помощью File.ReadAllLines()");

// Прочитать текст по одной строке за раз
if (File.Exists(file)) <
// Поместим каждую строку в массив строк
string[] lines = File.ReadAllLines(file);

foreach(string ln in lines)
Console.WriteLine(ln);
>
Console.WriteLine();

Console.WriteLine("Чтение файла с помощью StreamReader");

// используем StreamReader
if (File.Exists(file)) <
// Читаем файл построчно
var textFile = new StreamReader(file);
string line;

while ((line = textFile.ReadLine()) != null) <
Console.WriteLine(line);
>

Чтобы запустить эту программу, сохраните файл с расширением .cs, а затем выполните команду /путь к компилятору/csc filename.cs в cmd. После выполнения данной команды должен появиться исполняемый .exe файл. Или вы можете использовать Visual Studio — там просто нужно нажать на кнопку — Запуск без отладки.

Таким образом, мы прочитали текст из файла тремя способами, каждый из которых имеет свои преимущества.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 0 ):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Добавить комментарий

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