Directory C#
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали немного о том, как работать с файлами в C#. В данной статье я бы хотел поговорить о том, как работать с директориями в C#. Для работы с папками в C# существует 2 класса: "Directory" и "DirectoryInfo" из пространства имен "System.IO". Разница между ними заключается в том, что в случае с классом "Directory", вы работаете со статическими методами, в случае "DirectoryInfo" — через методы объекта.
В этих классах есть 2 метода, которые представляют наибольший интерес — это получение списка папок "GetDirectories()" и списка файлов "GetFiles()". Метод "GetFiles()" у этих двух классов различается типом возвращаемого значения: у "Directory" возвращается массив строк с именами файлов, у "DirectoryInfo" — массив объектов "FileInfo". В случае получения списка файлов, для последующей работы с ним лучше использовать метод класса "DirectoryInfo". У объекта "FileInfo" очень просто обращаться к различным свойствам файла.
Давайте напишем пример, который будет демонстрировать различие работы этих методов. Будем выводить "название файла | дата создания":
using System;
using System.Text;
using System.IO;
namespace TestApplicationForStudy
{
class Program
{
static void Main(string[] args)
{
string pathToDirectory = @"C:\";
{ //Для начала покажу как работать с классом DirectoryInfo:
// Создаём объект класса DirectoryInfo
DirectoryInfo dI = new DirectoryInfo(pathToDirectory);
// allFiles - это массив объектов FileInfo
FileInfo[] allFiles = dI.GetFiles();
// Для каждого файла выводим "название - дата создания"
// Что интересно, будут также показываться и скрытые файлы, и системные
foreach (FileInfo fI in allFiles)
{
Console.WriteLine(fI.Name + " | " + fI.CreationTime);
}
}
Console.WriteLine("----------------------------");
// Давайте теперь поколдуем с классом Directory
{
// Здесь allFiles - это массив строк
string[] allFiles = Directory.GetFiles(pathToDirectory);
// У строк уже нет свойств Name и CreationTime
foreach (string str in allFiles)
{
// создаём объект fI для получения свойств Name и CreationTime
FileInfo fI = new FileInfo(str);
Console.WriteLine(fI.Name + " | " + fI.CreationTime);
}
}
Console.ReadLine();
}
}
}
Первый способ более оптимальный с точки зрения потребляемой памяти, т.к. отсутствует строковый массив, т.е. он не висит в памяти.
Достаточно полезным является метод проверки существования директории (метод "Exists()"):
if (Directory.Exists(pathToDirectory)) Console.WriteLine("Директория существует");
При работе с директориями в C# их можно перемещать ("Move()"), удалять ("Delete()"), создавать новые ("CreateDirectory()"). Тут важно понимать, что в данном случае все эти операции делает файловая система. Мы просто вызываем методы, в которых инкапсулирована вся эта работа.
Помимо получения списка вложенных файлов, можно получить список непосредственно вложенных в эту папку директорий. За это отвечает метод "GetDirectories()".
Эти методы "GetFiles()" и "GetDirectories()" являются перегруженными, т.е. их можно вызывать с параметрами, например задать какую-нибудь маску файла.
Давайте напишем пример, который выводит все текстовые файлы директории. Давайте заодно разберем, как бы пришлось делать без маски. Данный пример больше относится для работы с файлами, но напишем его всё равно:
using System;
using System.Text;
using System.IO;
namespace TestApplicationForStudy
{
class Program
{
static void Main(string[] args)
{
string pathToDirectory = @"C:\";
DirectoryInfo dI = new DirectoryInfo(pathToDirectory);
{
FileInfo[] allFiles = dI.GetFiles();
foreach (FileInfo fI in allFiles)
{
// Проверяем расширение, и если это текстовый
// файл - выводим его
if (fI.Extension == ".txt")
{
Console.WriteLine(fI.Name);
}
}
}
Console.WriteLine("----------------------------");
{
// Прямо в методе указываем шаблон
FileInfo[] allFiles = dI.GetFiles("*.txt");
foreach (FileInfo fI in allFiles)
{
Console.WriteLine(fI.Name);
}
}
Console.ReadLine();
}
}
}
Во втором случае кода становится меньше (не за счет читабельности и восприятия кода), что в данном случае является преимуществом.
В качестве домашнего задания: вывести все каталоги директории.
В данной статье вы узнали, как работать с директориями в C#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




