コード例 #1
0
        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();
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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();
        }
コード例 #7
0
        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();
        }