public static void LinkFiles(string rootFolder, string destination, out int exitCode, params string[] exclusions) { exitCode = 1; FileInfo[] files = new DirectoryInfo(rootFolder).GetFiles(); for (int i = 0; i < files.Length; i++) { FileInfo file = files[i]; string lower = file.Name.ToLower(); bool cont = false; for (int j = 0; j < exclusions.Length; j++) { string exc = exclusions[j]; if (lower.Contains(exc)) { cont = true; break; } } if (cont) { continue; } string relative = file.FullName.Replace(rootFolder + @"\", ""); string linkPath = Path.Combine(destination, relative); CmdUtil.MkLinkFile(file.FullName, linkPath, out exitCode); } }
public static void LinkDirectories(string rootFolder, string destination, out int exitCode, params string[] exclusions) { exitCode = 1; DirectoryInfo[] dirs = new DirectoryInfo(rootFolder).GetDirectories(); for (int i = 0; i < dirs.Length; i++) { DirectoryInfo dir = dirs[i]; if (exclusions.Contains(dir.Name.ToLower())) { continue; } string relative = dir.FullName.Replace(rootFolder, ""); if (relative.StartsWith(@"\") || relative.StartsWith("/")) { relative = relative.Remove(0, 1); } string linkPath = Path.Combine(destination, relative); CmdUtil.MkLinkDirectory(dir.FullName, linkPath, out exitCode); } }
public static void LinkFiles(string rootFolder, string destination, out int exitCode, string[] exclusions, string[] copyInstead) { exitCode = 1; FileInfo[] files = new DirectoryInfo(rootFolder).GetFiles(); for (int i = 0; i < files.Length; i++) { FileInfo file = files[i]; string lower = file.Name.ToLower(); bool exclude = false; for (int j = 0; j < exclusions.Length; j++) { string exc = exclusions[j]; if (lower.Contains(exc)) { // check if the file is i exclude = true; break; } } if (exclude) { continue; } for (int j = 0; j < copyInstead.Length; j++) { string copy = copyInstead[j]; if (lower.Contains(copy)) { exclude = true; break; } } string relative = file.FullName.Replace(rootFolder + @"\", ""); string linkPath = Path.Combine(destination, relative); if (exclude) { // should copy! File.Copy(file.FullName, linkPath, true); } else { CmdUtil.MkLinkFile(file.FullName, linkPath, out exitCode); } } }
public static void MkLink(string folderPath, string destinationPath, params string[] exclude) { DirectoryInfo source = new DirectoryInfo(folderPath); DirectoryInfo[] allDirs = source.GetDirectories(); if (!Directory.Exists(destinationPath)) { Directory.CreateDirectory(destinationPath); } for (int i = 0; i < allDirs.Length; i++) { DirectoryInfo dir = allDirs[i]; string sourceFolder = dir.FullName; if (exclude.Contains(dir.Name.ToLower())) { continue; } string destination = Path.Combine(destinationPath, dir.Name); int exitCode; CmdUtil.ExecuteCommand(destinationPath, out exitCode, "mklink /d \"" + destination + "\" \"" + sourceFolder + "\""); } FileInfo[] allFiles = source.GetFiles(); for (int i = 0; i < allFiles.Length; i++) { FileInfo f = allFiles[i]; string sourceFile = f.FullName; if (exclude.Contains(f.Name.ToLower())) { continue; } string destination = Path.Combine(destinationPath, f.Name); int exitCode; CmdUtil.ExecuteCommand(destinationPath, out exitCode, "mklink \"" + destination + "\" \"" + sourceFile + "\""); } }
public static void LinkDirectory(string root, DirectoryInfo currentDir, string destination, out int exitCode, string[] dirExclusions, string[] fileExclusions, string[] fileCopyInstead, bool overrideSpecial = false) { exitCode = 1; bool special = overrideSpecial; for (int j = 0; j < dirExclusions.Length; j++) { string exclusion = dirExclusions[j]; string fullPath = Path.Combine(root, exclusion).ToLower(); if (fullPath.Contains(currentDir.FullName.ToLower())) { // special case, one of our subfolders is excluded special = true; break; } } if (special) { // this folder has a child that cant be symlinked Directory.CreateDirectory(destination); CmdUtil.LinkFiles(currentDir.FullName, destination, out exitCode, fileExclusions, fileCopyInstead); DirectoryInfo[] children = currentDir.GetDirectories(); for (int i = 0; i < children.Length; i++) { DirectoryInfo child = children[i]; LinkDirectory(root, child, Path.Combine(destination, child.Name), out exitCode, dirExclusions, fileExclusions, fileCopyInstead); } } else { // we symlink this directly CmdUtil.MkLinkDirectory(currentDir.FullName, destination, out exitCode); } }