Example #1
0
        /// <summary>
        ///   Changes an existing link target to a new path.
        /// </summary>
        /// <param name="linkPath"> The link path. </param>
        /// <param name="newActualPath"> The new actual path. </param>
        /// <remarks>
        /// </remarks>
        public void ChangeLinkTarget(string linkPath, string newActualPath)
        {
            linkPath      = linkPath.GetFullPath();
            newActualPath = GetActualPath(newActualPath.GetFullPath());
            var oldActualPath = GetActualPath(linkPath);

            if (oldActualPath.Equals(newActualPath, StringComparison.CurrentCultureIgnoreCase))
            {
                return;
            }

            if (!IsSymlink(linkPath))
            {
                throw new PathIsNotSymlinkException(linkPath);
            }

            if (Directory.Exists(linkPath))
            {
                ReparsePoint.ChangeReparsePointTarget(linkPath, newActualPath);
            }
            else if (File.Exists(linkPath))
            {
                DeleteSymlink(linkPath);
                MakeFileLink(linkPath, newActualPath);
            }
            else
            {
                throw new DirectoryNotFoundException("Target directory not found");
            }
        }
Example #2
0
        public void ChangeLinkTarget(string linkPath, string newActualPath)
        {
            linkPath      = linkPath.GetFullPath();
            newActualPath = GetActualPath(newActualPath.GetFullPath());

            if (!IsSymlink(linkPath))
            {
                throw new PathIsNotSymlinkException(linkPath);
            }

            ReparsePoint.ChangeReparsePointTarget(linkPath, newActualPath);
        }
Example #3
0
        /// <summary>
        ///   Creates a symlink for a directory. If it already exists, it is updated.
        /// </summary>
        /// <param name="linkPath"> The link path. </param>
        /// <param name="actualFolderPath"> The actual folder path. </param>
        /// <remarks>
        /// </remarks>
        public void MakeDirectoryLink(string linkPath, string actualFolderPath)
        {
            linkPath         = linkPath.GetFullPath();
            actualFolderPath = GetActualPath(actualFolderPath.GetFullPath());

            if (!Directory.Exists(actualFolderPath))
            {
                throw new FileNotFoundException("Cannot link to non-existent directory", actualFolderPath);
            }

            if (Directory.Exists(linkPath) && IsSymlink(linkPath))
            {
                ReparsePoint.ChangeReparsePointTarget(linkPath, actualFolderPath);
                return;
            }

            if (File.Exists(linkPath) || Directory.Exists(linkPath))
            {
                throw new ConflictingFileOrFolderException(linkPath);
            }

            ReparsePoint.CreateJunction(linkPath, actualFolderPath);
        }