public bool IsSymlink(string linkPath) { if (!ReparsePoint.IsReparsePoint(linkPath)) { return(false); } var reparsePoint = ReparsePoint.Open(linkPath); return(reparsePoint.IsSymlinkOrJunction); }
/// <summary> /// Determines whether the specified link path is symlink. /// </summary> /// <param name="linkPath"> The link path. </param> /// <returns> /// <c>true</c> if the specified link path is symlink; otherwise, <c>false</c> . /// </returns> /// <remarks> /// </remarks> public bool IsSymlink(string linkPath) { linkPath = linkPath.GetFullPath(); if (File.Exists(linkPath)) { if (GetFileInfo(linkPath).NumberOfLinks > 1) { string canonicalFilePath; var alternates = GetAlternateStreamData(linkPath, out canonicalFilePath); var result = !linkPath.Equals(canonicalFilePath, StringComparison.CurrentCultureIgnoreCase); try { if (result && !alternates.Contains(linkPath)) { AddSymlinkToAlternateStream(canonicalFilePath, linkPath); } } catch { // just trying to clean-as-we-go } return(result); } try { var s = new FileInfo(linkPath).GetAlternateDataStream(legacySymlinkInfo); if (s.Exists) { s.Delete(); } } catch { // just try to clean as we go... } return(false); } if (Directory.Exists(linkPath)) { return(ReparsePoint.IsReparsePoint(linkPath)); } throw new FileNotFoundException("Link does not exist"); }