При разработке программ, активно использующих информацию о файловой системе, часто возникает необходимость получать и отслеживать изменения, происходящие с файлами и каталогами. Наиболее ярким примером такого слежения являются всякого рода клиенты для облачных хранилищ типа Яндекс.Диск, Dropbox и т.д. Такие клиенты следят за изменениями в конкретной папке на диске и при малейшем изменении инициируют процесс синхронизации с облаком. Сегодня мы рассмотрим то, как организовать отслеживание изменений в файловой системе с использованием механизмов предоставляемых в .NET C#
System.IO
Класс, реализующий IFormatProvider для вывода размера файла
При работе с файловой системой, все размеры файлов в C# возвращаются в байтах. С одной стороны — это полностью оправданный и правильный подход, а, с другой стороны — пользователю не всегда удобно видеть перед собой огромные числа, обозначающие, например, объем свободного места на диске. Для предоставления информации о размере файла или объеме диска в удобном для пользователя виде (в Кб, Мб, Тб и т.д.) существует несколько подходов, например, можно написать свой метод перевода величин. Мы же сегодня рассмотрим класс, который реализует интерфейс IFormatProvider в C# и может использоваться при форматировании строк, содержащих размер файла.
Работа с файловой системой в C#. Работа с путями (класс Path)
Путь — это строка, представляющая расположение файла или каталога. При этом, путь не обязательно указывает на физическое расположение чего-либо на диске. Например, путь может быть сопоставлен с расположением в памяти или на другом устройстве. Точный формат пути определяется текущей операционной системой. Так, например, в Windows системах путь может начинаться с буквы диска или тома, а в других операционных системах этот элемент может отсутствовать. В C# работа с путями осуществляется с использованием класса Path
из пространства имен System.IO
.
Работа с файловой системой в C#. Работа с файлами (классы File и FileInfo)
Аналогично тому, как организована работа с каталогами в C#, для работы с файлами в пространстве имен System.IO
предусмотрено два класса для работы с файлами — File
и FileInfo
. Рассмотрим как можно использовать эти классы при работе с файловой системой в C#. Однако, прежде, чем мы приступим к рассмотрению функциональности новых классов, необходимо рассмотреть вопрос о том, как получить список файлов в определенном каталоге.
Работа с файловой системой в C#. Работа с каталогами (классы Directory и DirectoryInfo)
В предыдущей части мы рассмотрели работу с дисками. Сегодня углубимся в работу с файловой системой в C# и рассмотрим вопросы по работе с каталогами. Для работы с каталогами в пространстве имен System.IO
можно использовать сразу два класса: Directory
и DirectoryInfo
. Во многом эти классы схожи по функциональности и оба класса являются статическими, однако, следуя рекомендациям Microsoft, класс DirectoryInfo
следует использовать в том случае, если в приложении подразумевается, что объект для работы с директориями будет использоваться многократно. В отличие от DirectoryInfo
, класс Directory
выполняют проверку безопасности всех методов, что, в итоге, может сказаться на производительности приложения.
Работа с файловой системой в C#. Работа с дисками (класс DriveInfo)
Так или иначе, но большинство задач при написании приложений связано с работой с файловой системой — дисками, файлами, каталогами и т.д. Так, например, нам может потребоваться информация о файлах, расположенных в определенном каталоге, или доступное свободное место на жестком диске и т.д., не говоря уже о создании, удалении или перемещении файлов, генерируемых нашим приложением. C# предоставляет нам достаточно широкие возможности по работе с файловой системой ОС, большинство из которых сосредоточены в пространстве имен System.IO
.