Работа с файлами и каталогами

Содержание

Слайд 2

Пространство имен System.IO Фреймворк .NET предоставляет большие возможности по управлению и

Пространство имен System.IO

Фреймворк .NET предоставляет большие возможности по управлению и манипуляции файлами

и каталогами, которые по большей части сосредоточены в пространстве имен System.IO. Классы, расположенные в этом пространстве имен (такие как Stream, StreamWriter, FileStream и др.), позволяют управлять файловым вводом-выводом.
Слайд 3

Работа с дисками

Работа с дисками

Слайд 4

Работа с дисками Для представления диска в пространстве имен System.IO имеется

Работа с дисками

Для представления диска в пространстве имен System.IO имеется класс

DriveInfo.
Метод GetDrives возвращает имена всех логических дисков компьютера.
свойства:
AvailableFreeSpace: указывает на объем доступного свободного места на диске в байтах
DriveFormat: получает имя файловой системы
DriveType: представляет тип диска
IsReady: готов ли диск (например, DVD-диск может быть не вставлен в дисковод)
Name: получает имя диска
TotalFreeSpace: получает общий объем свободного места на диске в байтах
TotalSize: общий размер диска в байтах
VolumeLabel: получает или устанавливает метку тома
Слайд 5

Работа с дисками

Работа с дисками

Слайд 6

Работа с каталогами

Работа с каталогами

Слайд 7

Работа с каталогами Для работы с каталогами в пространстве имен System.IO

Работа с каталогами

Для работы с каталогами в пространстве имен System.IO предназначены

два класса: Directory и DirectoryInfo.
Класс Directory объявлен и определен в корне System.IO. Содержит в себе группу статических членов для создания, удаления, перемещения и переименования каталогов и подкаталогов.
Запечатанный (sealed - предотвращает наследование) и статический (static ) тип: не может иметь наследников, объект класса создать нельзя.
Класс DirectoryInfo - ссылочный тип, наследуется от System.IO.FileSystemInfo, поэтому имеет множество перегруженных методов родительского класса, а также некоторые полезные свойства при работе с каталогами.
Слайд 8

Класс Directory Класс Directory предоставляет ряд статических методов для управления каталогами.

Класс Directory

Класс Directory предоставляет ряд статических методов для управления каталогами. Некоторые

из этих методов:
CreateDirectory(path): создает каталог по указанному пути path
Delete(path): удаляет каталог по указанному пути path
Exists(path): определяет, существует ли каталог по указанному пути path. Если существует, возвращается true, если не существует, то false
GetDirectories(path): получает список каталогов в каталоге path
GetFiles(path): получает список файлов в каталоге path
Move(sourceDirName, destDirName): перемещает каталог
GetParent(path): получение родительского каталога
Слайд 9

Пример получения списка файлов и подкаталогов Класс Directory Обратите внимание на

Пример получения списка файлов и подкаталогов

Класс Directory

Обратите внимание на использование слешей

в именах файлов. Либо используется двойной слеш: "C:\\", либо одинарный, но тогда перед всем путем ставится знак @: @"C:\Program Files"
Слайд 10

Создание/удаление каталога

Создание/удаление каталога

Слайд 11

блок try\catch Поскольку каждое использование функционала класса Directory сопряжено либо с

блок try\catch

Поскольку каждое использование функционала класса Directory сопряжено либо с проверкой

введенных пользователем путями, либо с файлами внутри каталога рекомендуется включать его в блок try\catch. Если путь будет задан неправильно, это вызовет исключение.
Слайд 12

Слайд 13

Класс DirectoryInfo Данный класс предоставляет функциональность для создания, удаления, перемещения и

Класс DirectoryInfo

Данный класс предоставляет функциональность для создания, удаления, перемещения и других

операций с каталогами. Во многом он похож на Directory.
Некоторые из его свойств и методов:
Create(): создает каталог
CreateSubdirectory(path): создает подкаталог по указанному пути path
Delete(): удаляет каталог
Свойство Exists: определяет, существует ли каталог
GetDirectories(): получает список каталогов
GetFiles(): получает список файлов
MoveTo(destDirName): перемещает каталог
Свойство Parent: получение родительского каталога
Свойство Root: получение корневого каталога
Слайд 14

Поскольку DirectoryInfo – ссылочный тип(класс), прежде чем воспользоваться его членами нужно

Поскольку DirectoryInfo – ссылочный тип(класс), прежде чем воспользоваться его членами нужно создать его

объект с помощью конструктора. В качестве параметра конструктора необходимо передать строку с путем и именем каталога. Каталог будет назначен текущим рабочим каталогом для созданного экземпляра DirectInfo.

Класс DirectoryInfo

Слайд 15

Создание каталога Сначала проверяем, нет ли такой директории, так как если

Создание каталога

Сначала проверяем, нет ли такой директории, так как если она

существует, то ее создать будет нельзя, и приложение выбросит ошибку. В итоге у нас получится следующий путь: "D:\example1\example3\code1"
Слайд 16

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

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

Слайд 17

Работа с файлами Файл – это набор данных, который хранится на

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

Файл – это набор данных, который хранится на внешнем

запоминающем устройстве (например на жестком диске). Файл имеет имя и расширение. Расширение позволяет идентифицировать, какие данные и в каком формате хранятся в файле. Под работой с файлами подразумевается: - создание файлов; - удаление файлов; - чтение данных; - запись данных; - изменение параметров файла (имя, расширение…); - другое.
Слайд 18

Классы File и FileInfo Для работы с файлами в пространстве имен

Классы File и FileInfo

Для работы с файлами в пространстве имен System.IO

предназначены два класса: File и FileInfo
Различие между классами кроется в механизме взаимодействия с ними.
Все члены класса File – статические, поэтому он позволяет производить файловые операции без необходимости создавать объект типа. Все его методы требуют указания файлового пути, то есть адресной ссылки внутри файловой системы.
Статичность методов класса File делает его использование предпочтительным в большинстве случаев, когда файловая операция – одиночная.
Когда существует необходимость множественных действий с конкретным файлом, то безопасней и удобней создать объектную ссылку. Такой подход заключен в классе FileInfo. Функционал этого класса заметно шире.
Слайд 19

Класс FileInfo Предоставляет свойства и методы экземпляра для создания, копирования, удаления,

Класс FileInfo

Предоставляет свойства и методы экземпляра для создания, копирования, удаления, перемещения

и открытия файлов

Основные методы и свойства:
CopyTo(path): копирует файл в новое место по указанному пути path
Create(): создает файл
Delete(): удаляет файл
MoveTo(destFileName): перемещает файл в новое место
Свойство Exists: указывает, существует ли файл
Свойство Length: получает размер файла
Свойство Name: получает имя файла

Слайд 20

Абсолютный и относительный путь Абсолютные пути полностью указывают расположение: файл или

Абсолютный и относительный путь

Абсолютные пути полностью указывают расположение: файл или каталог

могут быть однозначно идентифицированы независимо от текущего расположения.

Относительные пути указывают на неполное расположение: текущее расположение используется в качестве отправной точки при поиске файла, указанного относительного пути.

Слайд 21

Получение информации о файле

Получение информации о файле

Слайд 22

Получение информации о файле (пример с неверным путем)

Получение информации о файле (пример с неверным путем)

Слайд 23

Создание пустого файла (абсолютный путь) Если файл с таким именем уже

Создание пустого файла (абсолютный путь)

Если файл с таким именем уже существует,

он будет переписан на новый пустой файл.
Слайд 24

Создание пустого файла (относительный путь)

Создание пустого файла (относительный путь)

Слайд 25

Чтение данных и запись данных в файл Способы чтения и записи

Чтение данных и запись данных в файл

Способы чтения и записи в

файл:
Статическими методами класса File.
С помощью методов классов StreamReader и Streamwriter.
С помощью методов классов BinaryReader и BinaryWriter.

Первый способ самый удобный, поскольку позволяет считать или заполнить весь файл буквально в одну строку кода. Благодаря тому, что методы класса File статические, нет необходимости создавать экземпляры объектов, работающих с файлами. Для большинства задач его методы подходят.
Объекты StreamReader и StreamWriter (BinaryReader и BinaryWriter) возвращаются методами класса FileInfo, как экземпляры, непосредственно работающие с файлом. Код становится более громоздким, но и более гибким, поскольку позволяет организовать сложную систему считывания/записи данных файл, внутри единого блока try/catch для обработки исключений.

Слайд 26

Чтение/запись статическими методами класса File.

Чтение/запись статическими методами класса File.

Слайд 27

Запись текста в файл Метод WriteAllText() создает новый файл (если такого

Запись текста в файл

Метод WriteAllText() создает новый файл (если такого нет), либо открывает

существующий и записывает текст, заменяя всё, что было в файле. Метод имеет два параметра: строковое имя файла и строку или массив строк, которые нужно записать в файл. Метод сам откроет файл, запишет в него текст и закроет его. 
Слайд 28

Метод AppendAllText() работает, как и метод WriteAllText() за исключением того, что

Метод AppendAllText() работает, как и метод WriteAllText() за исключением того, что новый текст

дописывается в конец файла, а не переписывает всё что было в файле.

Запись текста в файл

Слайд 29

Считывание данных из файла Функционал класса File позволяет считывать из файла

Считывание данных из файла

Функционал класса File позволяет считывать из файла данные

в виде строк. Основной метод, который используется при этом – ReadAllText().
При вызове через имя класса он:
Открывает файл.
Считывает все строки файла.
Закрывает файл.
Слайд 30

Функционал класса File позволяет считывать из файла данные в виде строк.

Функционал класса File позволяет считывать из файла данные в виде строк.

Основной метод, который используется при этом – ReadAllText().

Считывание данных из файла

Слайд 31

Чтение/запись с помощью методов классов StreamReader и Streamwriter.

Чтение/запись с помощью методов классов StreamReader и Streamwriter.

Слайд 32

Поток Поток – это абстрактное представление данных (в байтах), которое облегчает

Поток

Поток – это абстрактное представление данных (в байтах), которое облегчает работу с

ними. В качестве источника данных может быть файл, устройство ввода-вывода, принтер. Класс Stream является абстрактным базовым классом для всех потоковых классов в Си-шарп.
Для работы с файлами используется класс  FileStream (файловый поток).
FileStream - представляет поток, который позволяет выполнять операции чтения/записи в файл.
Слайд 33

Для создания объекта FileStream можно использовать как конструкторы этого класса, так

Для создания объекта FileStream можно использовать как конструкторы этого класса, так

и статические методы класса File. 
Один из конструкторов имеет вид:
FileStream(string filename, FileMode mode)

Создание FileStream

Перечисление, указывает на режим доступа к файлу

путь к файлу

Слайд 34

Append: если файл существует, то текст добавляется в конец файл. Если

Append: если файл существует, то текст добавляется в конец файл. Если

файла нет, то он создается. Файл открывается только для записи.
Create: создается новый файл. Если такой файл уже существует, то он перезаписывается
CreateNew: создается новый файл. Если такой файл уже существует, то он приложение выбрасывает ошибку
Open: открывает файл. Если файл не существует, выбрасывается исключение.
OpenOrCreate: если файл существует, он открывается, если нет - создается новый
Truncate: если файл существует, то он перезаписывается. Файл открывается только для записи.

Режимы доступа к файлу:

Создание FileStream

Слайд 35

Для чтения данных из потока используется класс StreamReader Чтение из файла

Для чтения данных из потока используется класс StreamReader

Чтение из файла

Слайд 36