private void AlphaFS_Directory_Copy_Overwrite_DestinationFileAlreadyExists(bool isNetwork) { using (var tempRoot = new TemporaryDirectory(isNetwork)) { var folderSrc = tempRoot.CreateTree(); var folderDst = tempRoot.RandomDirectoryFullPath; Console.WriteLine("Src Directory Path: [{0}]", folderSrc.FullName); Console.WriteLine("Dst Directory Path: [{0}]", folderDst); Alphaleonis.Win32.Filesystem.Directory.Copy(folderSrc.FullName, folderDst); var dirEnumOptions = Alphaleonis.Win32.Filesystem.DirectoryEnumerationOptions.FilesAndFolders | Alphaleonis.Win32.Filesystem.DirectoryEnumerationOptions.Recursive; var props = Alphaleonis.Win32.Filesystem.Directory.GetProperties(folderSrc.FullName, dirEnumOptions); var sourceTotal = props["Total"]; var sourceTotalFiles = props["File"]; var sourceTotalSize = props["Size"]; Console.WriteLine("\n\tTotal size: [{0}] - Total Folders: [{1}] - Files: [{2}]", Alphaleonis.Utils.UnitSizeToText(sourceTotalSize), sourceTotal - sourceTotalFiles, sourceTotalFiles); ExceptionAssert.AlreadyExistsException(() => Alphaleonis.Win32.Filesystem.Directory.Copy(folderSrc.FullName, folderDst)); Assert.IsTrue(System.IO.Directory.Exists(folderDst), "The directory does not exist, but is expected to."); // Overwrite using CopyOptions.None var copyResult = Alphaleonis.Win32.Filesystem.Directory.Copy(folderSrc.FullName, folderDst, Alphaleonis.Win32.Filesystem.CopyOptions.None); props = Alphaleonis.Win32.Filesystem.Directory.GetProperties(folderDst, dirEnumOptions); Assert.AreEqual(sourceTotal, props["Total"], "The number of total file system objects does not match, but is expected to."); Assert.AreEqual(sourceTotalFiles, props["File"], "The number of total files does not match, but is expected to."); Assert.AreEqual(sourceTotalSize, props["Size"], "The total file size does not match, but is expected to."); // Test against copyResult results. Assert.IsNotNull(copyResult); Assert.AreEqual(sourceTotal, copyResult.TotalFolders + copyResult.TotalFiles, "The number of total file system objects does not match, but is expected to."); Assert.AreEqual(sourceTotalFiles, copyResult.TotalFiles, "The number of total files does not match, but is expected to."); Assert.AreEqual(sourceTotalSize, copyResult.TotalBytes, "The total file size does not match, but is expected to."); } Console.WriteLine(); }
private void AlphaFS_Directory_EncryptDecrypt(bool isNetwork) { using (var tempRoot = new TemporaryDirectory(isNetwork)) { var folder = tempRoot.CreateTree(); Console.WriteLine("Input Directory Path: [{0}]", folder.FullName); // Encrypt root folder only. Alphaleonis.Win32.Filesystem.Directory.Encrypt(folder.FullName); // Verify that the contents of the folder are still decrypted. var cnt = 0; foreach (var fsei in Alphaleonis.Win32.Filesystem.Directory.EnumerateFileSystemEntryInfos <Alphaleonis.Win32.Filesystem.FileSystemEntryInfo>(folder.FullName, Alphaleonis.Win32.Filesystem.DirectoryEnumerationOptions.Recursive)) { cnt++; Assert.IsTrue((fsei.Attributes & System.IO.FileAttributes.Encrypted) == 0, "It is expected that the file system object is decrypted, but it is not."); } if (cnt == 0) { UnitTestAssert.InconclusiveBecauseResourcesAreUnavailable(); } // Encrypt entire folder for decrypt test. Alphaleonis.Win32.Filesystem.Directory.Encrypt(folder.FullName, true); // Decrypt root folder only. Alphaleonis.Win32.Filesystem.Directory.Decrypt(folder.FullName); // Verify that the contents of the folder are still encrypted. cnt = 0; foreach (var fsei in Alphaleonis.Win32.Filesystem.Directory.EnumerateFileSystemEntryInfos <Alphaleonis.Win32.Filesystem.FileSystemEntryInfo>(folder.FullName, Alphaleonis.Win32.Filesystem.DirectoryEnumerationOptions.Recursive)) { cnt++; Assert.IsTrue((fsei.Attributes & System.IO.FileAttributes.Encrypted) != 0, "It is expected that the file system object is encrypted, but it is not."); } if (cnt == 0) { UnitTestAssert.InconclusiveBecauseResourcesAreUnavailable(); } } Console.WriteLine(); }
private void AlphaFS_Directory_Move_ThrowAlreadyExistsException_DestinationDirectoryAlreadyExists(bool isNetwork) { using (var tempRoot = new TemporaryDirectory(isNetwork)) { var srcFolder = tempRoot.CreateTree(); var dstFfolder = tempRoot.CreateDirectory(); Console.WriteLine("Src Directory Path: [{0}]", srcFolder.FullName); Console.WriteLine("Dst Directory Path: [{0}]", dstFfolder.FullName); ExceptionAssert.IOException(() => System.IO.Directory.Move(srcFolder.FullName, dstFfolder.FullName)); ExceptionAssert.AlreadyExistsException(() => Alphaleonis.Win32.Filesystem.Directory.Move(srcFolder.FullName, dstFfolder.FullName)); } Console.WriteLine(); }
private void Directory_Move_ThrowUnauthorizedAccessException_UserExplicitDenyOnDestinationFolder(bool isNetwork) { using (var tempRoot = new TemporaryDirectory(isNetwork)) { var srcFolder = tempRoot.CreateTree(); var dstFolder = tempRoot.CreateDirectory(); Console.WriteLine("Src Directory Path: [{0}]", srcFolder.FullName); Console.WriteLine("Dst Directory Path: [{0}]", dstFolder.FullName); var user = (Environment.UserDomainName + @"\" + Environment.UserName).TrimStart('\\'); var rule = new System.Security.AccessControl.FileSystemAccessRule(user, System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.InheritanceFlags.ContainerInherit | System.Security.AccessControl.InheritanceFlags.ObjectInherit, System.Security.AccessControl.PropagationFlags.None, System.Security.AccessControl.AccessControlType.Deny); // Set DENY for current user. var dirSecurity = dstFolder.GetAccessControl(); dirSecurity.AddAccessRule(rule); dstFolder.SetAccessControl(dirSecurity); try { ExceptionAssert.UnauthorizedAccessException(() => Alphaleonis.Win32.Filesystem.Directory.Move(srcFolder.FullName, dstFolder.FullName, Alphaleonis.Win32.Filesystem.MoveOptions.ReplaceExisting)); } finally { // Remove DENY for current user. dirSecurity = dstFolder.GetAccessControl(); dirSecurity.RemoveAccessRule(rule); dstFolder.SetAccessControl(dirSecurity); } } Console.WriteLine(); }
private void AlphaFS_Directory_CountFileSystemObjects_FilesOnly_Recursive(bool isNetwork) { using (var tempRoot = new TemporaryDirectory(isNetwork)) { const int expectedFso = 10; var folder = tempRoot.CreateTree(expectedFso); Console.WriteLine("Input Directory Path: [{0}]", folder.FullName); var fsoCount = Alphaleonis.Win32.Filesystem.Directory.CountFileSystemObjects(folder.FullName, "*", Alphaleonis.Win32.Filesystem.DirectoryEnumerationOptions.Files | Alphaleonis.Win32.Filesystem.DirectoryEnumerationOptions.Recursive); Console.WriteLine("\n\tTotal file system objects: [{0}]", fsoCount); Assert.AreEqual(expectedFso, fsoCount, string.Format(CultureInfo.InvariantCulture, "The number of file system objects are not equal, but are expected to.")); } Console.WriteLine(); }
private void AlphaFS_Directory_Copy_ThrowAlreadyExistsException_DestinationFileAlreadyExists(bool isNetwork) { using (var tempRoot = new TemporaryDirectory(isNetwork)) { var srcFolder = tempRoot.CreateTree(); var dstFolder = tempRoot.RandomDirectoryFullPath; Console.WriteLine("Src Directory Path: [{0}]", srcFolder.FullName); Console.WriteLine("Dst Directory Path: [{0}]", dstFolder); var action = new Action(() => Alphaleonis.Win32.Filesystem.Directory.Copy(srcFolder.FullName, dstFolder)); // 1st Copy action. action(); // 2nd Copy action. ExceptionAssert.AlreadyExistsException(() => action()); } Console.WriteLine(); }
private void AlphaFS_Directory_Move_Overwrite_DestinationDirectoryAlreadyExists(bool isNetwork) { using (var tempRoot = new TemporaryDirectory(isNetwork)) { var folderSrc = tempRoot.CreateTree(); var folderDst = tempRoot.RandomDirectoryFullPath; Console.WriteLine("Src Directory Path: [{0}]", folderSrc.FullName); Console.WriteLine("Dst Directory Path: [{0}]", folderDst); Alphaleonis.Win32.Filesystem.Directory.Copy(folderSrc.FullName, folderDst); var dirEnumOptions = Alphaleonis.Win32.Filesystem.DirectoryEnumerationOptions.FilesAndFolders | Alphaleonis.Win32.Filesystem.DirectoryEnumerationOptions.Recursive; var props = Alphaleonis.Win32.Filesystem.Directory.GetProperties(folderSrc.FullName, dirEnumOptions); var sourceTotal = props["Total"]; var sourceTotalFiles = props["File"]; var sourceTotalSize = props["Size"]; Console.WriteLine("\n\tTotal size: [{0}] - Total Folders: [{1}] - Files: [{2}]", Alphaleonis.Utils.UnitSizeToText(sourceTotalSize), sourceTotal - sourceTotalFiles, sourceTotalFiles); // Overwrite using MoveOptions.ReplaceExisting Alphaleonis.Win32.Filesystem.Directory.Move(folderSrc.FullName, folderDst, Alphaleonis.Win32.Filesystem.MoveOptions.ReplaceExisting); props = Alphaleonis.Win32.Filesystem.Directory.GetProperties(folderDst, dirEnumOptions); Assert.AreEqual(sourceTotal, props["Total"], "The number of total file system objects does not match, but is expected to."); Assert.AreEqual(sourceTotalFiles, props["File"], "The number of total files does not match, but is expected to."); Assert.AreEqual(sourceTotalSize, props["Size"], "The total file size does not match, but is expected to."); } Console.WriteLine(); }