private static void RecursivelyMoveThroughDirectoryInternal <TDataType>(string parentName, DirectoryInfo current, bool moveSubDirs, bool moveFiles, TDataType callbackData, RecursiveDirectoryMoveHandler <TDataType> callback) { // DirectoryInfo info = current; if (info.Exists) { string currentDir = parentName + Path.DirectorySeparatorChar + info.Name + Path.DirectorySeparatorChar; if (moveFiles) { FileInfo[] files = info.GetFiles(); foreach (FileInfo file in files) { if (!callback(file.FullName, currentDir + file.Name, true, callbackData)) { return; } } } if (moveSubDirs) { DirectoryInfo[] directories = info.GetDirectories(); foreach (DirectoryInfo directory in directories) { if (!callback(directory.FullName, currentDir + directory.Name, false, callbackData)) { return; } } directories = info.GetDirectories(); foreach (DirectoryInfo directory in directories) { RecursivelyMoveThroughDirectoryInternal(parentName + Path.DirectorySeparatorChar + info.Name, directory, true, moveFiles, callbackData, callback); } } } }
private static void RecursivelyMoveThroughDirectory <TDataType>(string directoryPath, bool moveSubDirs, bool moveFiles, TDataType callbackData, RecursiveDirectoryMoveHandler <TDataType> callback) { DirectoryInfo info = new DirectoryInfo(directoryPath); if (info.Exists) { if (moveFiles) { FileInfo[] files = info.GetFiles(); foreach (FileInfo file in files) { if (!callback(file.FullName, file.Name, true, callbackData)) { return; } } } if (moveSubDirs) { DirectoryInfo[] directories = info.GetDirectories(); foreach (DirectoryInfo directory in directories) { if (!callback(directory.FullName, directory.Name, false, callbackData)) { return; } } directories = info.GetDirectories(); foreach (DirectoryInfo directory in directories) { RecursivelyMoveThroughDirectoryInternal(string.Empty, directory, true, moveFiles, callbackData, callback); } } } }