Работа с файлами. Потоки ввода/вывода. Стандартные диалоги для выбора файлов.
Работа с файлами.
Файл - это набор данных, который хранится на внешнем запоминающем устройстве и имеет имя и расширение. Расширение позволяет идентифицировать, какие данные и в каком формате они хранятся в файле. Под работой с файлами подразумевается:
- Создание файлов
- Удаление файлов
- Чтение данных
- Запись данных
Для создания пустого файла, в классе File
есть метод Create(string)
.
Он принимает один аргумент – путь.
Если файл с таким именем уже существует, он будет переписан на новый пустой файл.
File.Create("путь");
Метод WriteAllText(string, string)
создает новый файл, либо открывает существующий и записывает текст, заменяя всё, что было в файле.
File.WriteAllText("путь", "текст");
Метод AppendAllText(string, string)
дописывает новый текст в конец файла, а не переписывает всё что было.
File.AppendAllText("путь", "этот текст допишется в конец");
Для удаления файла в классе File
существует метод Delete(string)
. Если файла не существует, исключение не выбросится.
File.Delete("путь");
Потоки ввода/вывода.
Поток – это абстрактное представление данных в байтах, которое облегчает работу с ними. В качестве источника данных может быть файл, устройство ввода-вывода, принтер.
Класс Stream
является абстрактным базовым классом для всех потоковых классов.
Для работы с файлами используется класс FileStream
(файловый поток).
Он представляет поток, который позволяет выполнять операции чтения/записи в файл.
//path - путь до файла
//FileMode - режимы открытия.(Append, Create, CreateNew, Open, OpenOrCreate, Truncate)
//FileAccess - доступ к файлу.(Read, Write, ReadWrite)
FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read);
Режимы открытия FileMode
:
Append
– открывает файл и переводит указатель в конец файла, или создает новый файл. Данный режим возможен только при режиме доступа FileAccess.Write.Create
- создает новый файл, если таковой существует – заменяет.CreateNew
– создает новый файл, если таковой существует – генерируется исключение.Open
- открывает файл, если не существует – генерируется исключение.OpenOrCreate
– открывает файл, либо создает новый, если его не существует.Truncate
– открывает файл, но все данные внутри файла затирает, если файла не существует – генерируется исключение.
Режим доступа FileAccess
:
Read
– открытие файла только на чтение. При попытке записи генерируется исключение.Write
- открытие файла только на запись. При попытке чтения генерируется исключение.ReadWrite
- открытие файла на чтение и запись.
Для чтения данных из потока испольуется StreamReader
.
FileStream fileStream = new FileStream(path, FileMode.Open); //Создаем файловый поток
StreamReader stream = new StreamReader(fileStream); //Cвязываем StreamReader c файловыйм потоком
string allData = stream.ReadToEnd(); // Метод ReadToEnd() считает все данные из файла.
string singleLine = stream.ReadLine(); // Метод ReadLine() считает одну строку и перенесет указатель на начало следующей строки.
stream.Close(); //закрытие потока
Для запись данных в поток используется класс StreamWriter
.
FileStream fileStream = new FileStream(path, FileMode.Open); //Создаем файловый поток
StreamWriter stream = new StreamWriter(fileStream); //Cвязываем StreamWriter c файловыйм потоком
stream.Write("текст"); //записывает в файл.
stream.WriteLine(string); //записывает в файл построчно
stream.Close(); //закрытие потока - иначе ничего не запишется
При создании потока можно указать кодировку, в которой файлы будут считываться/записываться.
FileStream fileStream = new FileStream(path, FileMode.Open);
StreamReader reader = new StreamReader(file1, Encoding.Unicode);
StreamWriter writer = new StreamWriter(file1, Encoding.UTF8);
Стандартные диалоги для выбора файлов.
Компонент OpenFileDialog позволяет просматривать папки личного компьютера или любого компьютера в сети, а также выбирать файлы, которые требуется открыть. Диалоговое окно возвращает путь и имя файла, который был выбран пользователем.
Открытие файла в виде потока с помощью компонента OpenFileDialog.
Stream stream = null;
OpenFileDialog openFileDialog = new OpenFileDialog();
if(openFileDialog.ShowDialog() == DialogResult.OK)//Показать диалог
{
try
{
if ((stream = openFileDialog.OpenFile()) != null)//Попытка открыть файл
{
using (stream)
{
// Тут можно работать с потоком
}
}
}
catch (Exception ex)
{
//Если не смог прочитать файл
}
}