Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
                }
            }
        }
Ejemplo n.º 4
0
        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 + "\"");
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }