Работа с файлами. Потоки ввода/вывода. Стандартные диалоги для выбора файлов.

Работа с файлами.

Файл - это набор данных, который хранится на внешнем запоминающем устройстве и имеет имя и расширение. Расширение позволяет идентифицировать, какие данные и в каком формате они хранятся в файле. Под работой с файлами подразумевается:

  • Создание файлов
  • Удаление файлов
  • Чтение данных
  • Запись данных

Для создания пустого файла, в классе 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)
        {
           //Если не смог прочитать файл
        }
    }

results matching ""

    No results matching ""