예제 #1
0
        public void CreateDirectoryDirect()
        {
            using (var cleaner = new TestFileCleaner())
            {
                using (var directory = DirectoryMethods.CreateDirectoryHandle(cleaner.TempFolder))
                {
                    directory.IsInvalid.Should().BeFalse();

                    string name = System.IO.Path.GetRandomFileName();
                    using (var subdir = DirectoryMethods.CreateDirectory(directory, name))
                    {
                        subdir.IsInvalid.Should().BeFalse();
                        FileMethods.DirectoryExists(Paths.Combine(cleaner.TempFolder, name)).Should().BeTrue();
                    }
                }
            }
        }
예제 #2
0
        public void QueryDosVolumePathBasic()
        {
            string tempPath = FileMethods.GetTempPath();

            using (var directory = DirectoryMethods.CreateDirectoryHandle(tempPath))
            {
                // This will give back the NT path (\Device\HarddiskVolumen...)
                string fullName   = HandleMethods.GetObjectName(directory);
                string fileName   = FileMethods.GetFileName(directory);
                string deviceName = fullName.Substring(0, fullName.Length - fileName.Length);

                string dosVolumePath = DeviceMethods.QueryDosVolumePath(deviceName);

                tempPath.Should().StartWith(dosVolumePath);
                tempPath.Should().Be(dosVolumePath + fileName + @"\");
            }
        }
예제 #3
0
        public void CreateRelativeToDirectoryHandle()
        {
            using (var cleaner = new TestFileCleaner())
            {
                string fileName = System.IO.Path.GetRandomFileName();
                using (var directory = DirectoryMethods.CreateDirectoryHandle(cleaner.TempFolder))
                {
                    directory.IsInvalid.Should().BeFalse();

                    using (var file = FileMethods.CreateFileRelative(fileName, directory, CreateDisposition.Create))
                    {
                        file.IsInvalid.Should().BeFalse();
                    }

                    FileMethods.FileExists(Paths.Combine(cleaner.TempFolder, fileName)).Should().BeTrue();
                }
            }
        }
예제 #4
0
        public void OpenDirectoryDirect()
        {
            using (var cleaner = new TestFileCleaner())
            {
                using (var directory = DirectoryMethods.CreateDirectoryHandle(cleaner.TempFolder))
                {
                    directory.IsInvalid.Should().BeFalse("can open the root directory");

                    string name = System.IO.Path.GetRandomFileName();
                    string path = Paths.Combine(cleaner.TempFolder, name);
                    DirectoryMethods.CreateDirectory(path);

                    using (var subdir = DirectoryMethods.CreateDirectoryHandle(directory, name))
                    {
                        subdir.IsInvalid.Should().BeFalse("can open subdir from handle");
                    }
                }
            }
        }
예제 #5
0
        public void GetVolumeNameBasic()
        {
            string tempPath = FileMethods.GetTempPath();

            using (var directory = DirectoryMethods.CreateDirectoryHandle(tempPath))
            {
                // This will give back the NT volume path (\Device\HarddiskVolumen\)
                try
                {
                    string name = FileMethods.GetVolumeName(directory);
                    name.Should().StartWith(@"\Device\");
                }
                catch (NotImplementedException)
                {
                    // Needs Windows 10
                    System.Environment.OSVersion.Version.Major.Should().BeLessThan(10);
                }
            }
        }
예제 #6
0
        public void GetBasicInfoByHandleBasic()
        {
            using (var cleaner = new TestFileCleaner())
            {
                string tempPath     = cleaner.TempFolder;
                string tempFileName = cleaner.GetTestPath();

                using (var directory = DirectoryMethods.CreateDirectoryHandle(tempPath))
                {
                    var directoryInfo = FileMethods.GetFileBasicInformation(directory);
                    directoryInfo.Attributes.Should().HaveFlag(FileAttributes.Directory);

                    using (var file = FileMethods.CreateFile(tempFileName, CreationDisposition.CreateNew))
                    {
                        var fileInfo = FileMethods.GetFileBasicInformation(file);
                        fileInfo.Attributes.Should().NotHaveFlag(FileAttributes.Directory);
                        fileInfo.CreationTimeUtc.Should().BeAfter(directoryInfo.CreationTimeUtc);
                    }
                }
            }
        }
        public void DeleteDirectoryBasic()
        {
            using (var temp = new TestFileCleaner())
            {
                string directoryPath = temp.GetTestPath();
                DirectoryMethods.CreateDirectory(directoryPath);
                using (var directory = DirectoryMethods.CreateDirectoryHandle(directoryPath))
                {
                    directory.IsInvalid.Should().BeFalse();
                }

                DirectoryMethods.RemoveDirectory(directoryPath);

                Action action = () =>
                {
                    using (var directory = DirectoryMethods.CreateDirectoryHandle(directoryPath))
                    {
                    }
                };

                action.ShouldThrow <System.IO.FileNotFoundException>();
            }
        }
예제 #8
0
        public void GetStreamInfoByHandleBasic()
        {
            using (var cleaner = new TestFileCleaner())
            {
                string tempPath     = cleaner.TempFolder;
                string tempFileName = cleaner.GetTestPath();

                using (var directory = DirectoryMethods.CreateDirectoryHandle(tempPath))
                {
                    var directoryInfo = FileMethods.GetStreamInformation(directory);
                    directoryInfo.Should().BeEmpty();

                    using (var file = FileMethods.CreateFile(tempFileName, CreationDisposition.CreateNew))
                    {
                        var fileInfo = FileMethods.GetStreamInformation(file);
                        fileInfo.Should().HaveCount(1);
                        var info = fileInfo.First();
                        info.Name.Should().Be(@"::$DATA");
                        info.Size.Should().Be(0);
                        info.AllocationSize.Should().Be(0);
                    }
                }
            }
        }
예제 #9
0
        public void GetStandardInfoByHandleBasic()
        {
            using (var cleaner = new TestFileCleaner())
            {
                string tempPath     = cleaner.TempFolder;
                string tempFileName = cleaner.GetTestPath();

                using (var directory = DirectoryMethods.CreateDirectoryHandle(tempPath))
                {
                    var info = FileMethods.GetFileStandardInformation(directory);
                    info.Directory.Should().BeTrue();
                }

                using (var file = FileMethods.CreateFile(tempFileName, CreationDisposition.CreateNew))
                {
                    var info = FileMethods.GetFileStandardInformation(file);
                    info.Directory.Should().BeFalse();
                    info.NumberOfLinks.Should().Be(1);
                    info.DeletePending.Should().BeFalse();
                    info.AllocationSize.Should().Be(0);
                    info.EndOfFile.Should().Be(0);
                }
            }
        }
예제 #10
0
 private IntPtr CreateDirectoryHandle(string fileName, string subDirectory)
 {
     return(DirectoryMethods.CreateDirectoryHandle(_directory, fileName));
 }