Работа с файловой системой в C#. Работа с каталогами (классы Directory и DirectoryInfo)

Как в c# переместить каталог?

string oldPath = @"C:SomeFolder";
string newPath = @"C:SomeDir";
DirectoryInfo dirInfo = new DirectoryInfo(oldPath);
if (dirInfo.Exists && Directory.Exists(newPath) == false)
{
    dirInfo.MoveTo(newPath);
}

При перемещении следует учитывать, что новый каталог, в который мы хотим перемесить все содержимое старого каталога, не должен существовать.

Как в c# получить дату/время создания каталога и его атрибуты?

У класса DirectoryInfo есть все необходимые методы для получения информации о каталоге. Например:

 static void Main(string[] args) { string root = @"C:CSharp Output"; string subDir = @"FileSystembin"; DirectoryInfo directory = new DirectoryInfo(root); if (!directory.Exists) { directory.Create(); } DirectoryInfo newDir = directory.CreateSubdirectory(subDir); Console.WriteLine(newDir.FullName); //получаем информацию о каталоге Console.WriteLine($"Время создания каталога: {newDir.CreationTime}"); Console.WriteLine($"Время последнего доступа: {newDir.LastAccessTime}"); Console.WriteLine($"Время последней записи в каталог: {newDir.LastWriteTime}"); if ((newDir.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) Console.WriteLine("скрытый каталог"); else Console.WriteLine("обычный каталог"); }
}

Вывод консоли будет следующим:

C:CSharp OutputFileSystembinВремя создания каталога: 18.10.2021 12:34:06Время последнего доступа: 18.10.2021 12:34:06Время последней записи в каталог: 18.10.2021 12:34:06обычный каталог

Как в c# получить путь к каталогу из которого запущена программа?

Для получения каталога из которого было запущено приложение можно воспользоваться методом Directory.GetCurrentDirectory(). Например,

string curDir = Directory.GetCurrentDirectory();
Console.WriteLine($"Программа запущена из каталога: {curDir}");

Результат может быть примерно таким:

Как в c# получить сведения о родительском каталоге и томе?

Для получения сведений о родительском каталоге в C# используется метод Directory.GetParent(), а для получения корневого тома — метод Directory.GetDirectoryRoot(). Например,

string curDir = Directory.GetCurrentDirectory();
Console.WriteLine($"Программа запущена из каталога: {curDir}");
Console.WriteLine($"Родительский каталог: {Directory.GetParent(curDir)}");
Console.WriteLine($"Корневой том: {Directory.GetDirectoryRoot(curDir)}");

Вывод консоли будет следующим:

Как в c# получить список всех каталогов в определенном каталоге?

Получим список всех каталогов в каталоге C:Windows:

foreach (string sub in Directory.GetDirectories(@"C:Windows")) Console.WriteLine($" {sub}");

Результат вывода будет примерно следующим:

C:WindowsaddinsC:WindowsappcompatC:WindowsapppatchC:WindowsAppReadinessC:WindowsassemblyC:WindowsbcastdvrC:WindowsBitLockerDiscoveryVolumeContentsC:WindowsBootC:WindowsBrandingC:WindowsBrowserCoreC:WindowsCbsTemp

Как в c# сделать скрытый каталог?

Для удаления каталога в C# может использоваться метод DirectoryInfo.Delete(). При этом, следует обратить внимание, что простой вызов этого метода (без параметров) вызовет исключение в том случае, если вы попытаетесь удалить каталог в котором находятся какие-либо другие элементы, например, файлы. Поэтому, если вам необходимо удалить каталог со всем содержимым, то необходимо выполнить следующим код:

string root = @"C:CSharp OutputFileSystem";
try
{ DirectoryInfo directory = new DirectoryInfo(root); directory.Delete(true); Console.WriteLine("Каталог удален");
}
catch (Exception ex)
{ Console.WriteLine(ex.Message);
}

Про обработку исключений в C# см. здесь.

:/>  Как эмулировать выбор текста с клавиатуры powershell с помощью wsl в терминале windows

Как в c# создавать каталоги и подкаталоги?

Для создания каталогов и подкаталогов в C# используются методы DirectoryInfo.Create() и DirectoryInfo.CreateSubdirectory(path). Рассмотрим использование этих методов в следующем примере:

static void Main(string[] args)
{ string root = @"C:CSharp Output"; string subDir = @"FileSystembin"; DirectoryInfo directory = new DirectoryInfo(root); if (!directory.Exists) { directory.Create(); } DirectoryInfo newDir = directory.CreateSubdirectory(subDir); Console.WriteLine(newDir.FullName);
}

В этом примере мы вначале проверяем наличие директории, используя свойство DirectoryInfo.Exist и, если директория отсутствует, то создаем её. На втором шаге мы, используя метод DirectoryInfo.CreateSubdirectory(path), создаем подкаталог. Вывод консоли будет выглядеть следующим образом:

C:CSharp OutputFileSystembin

Как узнать текущую директорию в с vs?

Путь передается как аргумент функции main.

#include<iostream>
int main(int argc, char *argv[]) { std::cout << argv[0] << 'n'; return 0;
}

В argc количество аргументов, в argv[] сами аргументы.
Первый аргумент всегда, путь к .exe

Класс directory

КлассDirectory — это статический класс, предоставляющий ряд статических методов для управления каталогами. Некоторые из этих методов:

Класс directoryinfo

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

Как можно видеть по описанию свойств и методов, часть того, что у класса Directory определено как метод (например, Exists) в DirectoryInfo определено как свойство, что позволяет использовать объект класса DirectoryInfo многократно, избегая возможно лишних проверок.

Итого

Сегодня мы рассмотрели основные моменты по работе с каталогами в C# с использованием классов Directory и DirectoryInfo. Научились создавать, перемещать и удалять каталоги, перечислять все подкаталоги в определенном каталоге.