using System.IO; namespace API.Extensions { public static class DirectoryInfoExtensions { public static void Empty(this DirectoryInfo directory) { foreach(FileInfo file in directory.EnumerateFiles()) file.Delete(); foreach(DirectoryInfo subDirectory in directory.EnumerateDirectories()) subDirectory.Delete(true); } /// /// Flattens all files in subfolders to the passed directory recursively. /// /// /// foo /// ├── 1.txt /// ├── 2.txt /// ├── 3.txt /// ├── 4.txt /// └── bar /// ├── 1.txt /// ├── 2.txt /// └── 5.txt /// /// becomes: /// foo /// ├── 1.txt /// ├── 2.txt /// ├── 3.txt /// ├── 4.txt /// ├── bar_1.txt /// ├── bar_2.txt /// └── bar_5.txt /// /// public static void Flatten(this DirectoryInfo directory) { FlattenDirectory(directory, directory); } private static void FlattenDirectory(DirectoryInfo root, DirectoryInfo directory) { if (!root.FullName.Equals(directory.FullName)) // I might be able to replace this with root === directory { foreach (var file in directory.EnumerateFiles()) { if (file.Directory == null) continue; var newName = $"{file.Directory.Name}_{file.Name}"; var newPath = Path.Join(root.FullName, newName); if (!File.Exists(newPath)) file.MoveTo(newPath); } } foreach (var subDirectory in directory.EnumerateDirectories()) { FlattenDirectory(root, subDirectory); } } } }