public void AlphaFS_DirectoryInfo_CreateJunction_And_ExistsJunction_And_DeleteJunction_Local_Success() { using (var tempRoot = new TemporaryDirectory()) { var toDelete = tempRoot.Directory.CreateSubdirectory("ToDelete"); var junction = System.IO.Path.Combine(toDelete.FullName, "MyJunctionPoint"); var target = tempRoot.Directory.CreateSubdirectory("JunctionTarget"); Console.WriteLine("Input Directory JunctionPoint Path: [{0}]", junction); Console.WriteLine("Input Directory JunctionTarget Path: [{0}]", target); #region CreateJunction var dirInfo = new Alphaleonis.Win32.Filesystem.DirectoryInfo(target.FullName); // On success, dirInfo.FullName now points to the directory junction. // The DirectoryInfo instance is updated. dirInfo.CreateJunction(junction); Assert.AreEqual(dirInfo.FullName, junction, "It is expected that the DirectoryInfo points to the directory junction, but it is not."); var dirInfoSysIO = new System.IO.DirectoryInfo(junction); UnitTestConstants.Dump(dirInfoSysIO); Assert.IsTrue((dirInfoSysIO.Attributes & System.IO.FileAttributes.ReparsePoint) != 0); var lvi = Alphaleonis.Win32.Filesystem.Directory.GetLinkTargetInfo(dirInfo.FullName); UnitTestConstants.Dump(lvi); UnitTestConstants.Dump(dirInfo.EntryInfo); Assert.AreEqual(System.IO.Directory.Exists(dirInfo.FullName), Alphaleonis.Win32.Filesystem.Directory.Exists(dirInfo.FullName)); Assert.AreEqual(junction, dirInfo.FullName); Assert.IsTrue(dirInfo.EntryInfo.IsDirectory); Assert.IsTrue(dirInfo.EntryInfo.IsMountPoint); Assert.IsTrue(dirInfo.EntryInfo.IsReparsePoint); Assert.IsFalse(dirInfo.EntryInfo.IsSymbolicLink); Assert.AreEqual(dirInfo.EntryInfo.ReparsePointTag, Alphaleonis.Win32.Filesystem.ReparsePointTag.MountPoint); // Create a folder in the junction and test the target. const string subFolder = "Test folder"; dirInfo.CreateSubdirectory(subFolder); Assert.IsTrue(System.IO.Directory.Exists(System.IO.Path.Combine(target.FullName, subFolder))); #endregion // CreateJunction // ExistsJunction Assert.IsTrue(Alphaleonis.Win32.Filesystem.Directory.ExistsJunction(dirInfo.FullName), "It is expected that the directory junction exists, but is does not."); Assert.IsTrue(System.IO.Directory.Exists(dirInfo.FullName), "It is expected that the directory exists, but is does not."); #region DeleteJunction // Remove directory junction, target directory should remain. dirInfo.DeleteJunction(); Assert.IsTrue(System.IO.Directory.Exists(dirInfo.FullName)); Assert.IsTrue(System.IO.Directory.Exists(dirInfo.Parent.FullName)); Assert.IsTrue(dirInfo.EntryInfo.IsDirectory); Assert.IsFalse(dirInfo.EntryInfo.IsMountPoint); Assert.IsFalse(dirInfo.EntryInfo.IsReparsePoint); Assert.IsFalse(dirInfo.EntryInfo.IsSymbolicLink); Assert.AreNotEqual(dirInfo.EntryInfo.ReparsePointTag, Alphaleonis.Win32.Filesystem.ReparsePointTag.MountPoint); #endregion // DeleteJunction // ExistsJunction Assert.IsFalse(Alphaleonis.Win32.Filesystem.Directory.ExistsJunction(dirInfo.FullName), "It is expected that the directory junction does not exist, but is does."); Assert.IsTrue(System.IO.Directory.Exists(dirInfo.FullName), "It is expected that the directory exists, but is does not."); } }