Exemplo n.º 1
0
 private static void EnsureFileNotExists(string file)
 {
     if (VirtualDrive.ExistsFile(file))
     {
         throw new Exception("\"" + file + "\" already exists!");
     }
 }
Exemplo n.º 2
0
        public static void WriteTagV2(byte[] raw, FileInfo file, Rewriter.Strategy strategy = Rewriter.Strategy.Exact)
        {
            CheckTagSizeV2(raw);
            CheckMpegOffset(file);

            using (VirtualDriveLock fileLock = new VirtualDriveLock(file.FullName, AccessObserver.AccessType.Write))
            {
                if (VirtualDrive.ExistsFile(file.FullName))
                {
                    Rewriter rewriter = new Rewriter(strategy);
                    int      padding  = rewriter.Rewrite(raw.Length, file);

                    if (padding != TagSize(raw))
                    {
                        raw = RecreateTagWithNewTagSize(raw, padding);
                    }
                }

                using (BinaryWriter writer = OpenWriter(file))
                {
                    writer.Write(raw);
                }
            }

            CheckMpegOffset(file);
        }
Exemplo n.º 3
0
 private static void EnsureFileExists(string file)
 {
     if (!VirtualDrive.ExistsFile(file))
     {
         throw new Exception("\"" + file + "\" does not exist!");
     }
 }
Exemplo n.º 4
0
        public static void WriteTagV2(Tag tag, FileInfo file, Rewriter.Strategy strategy = Rewriter.Strategy.Exact)
        {
            Debug.Assert(tag.DescriptionMap.Version != Version.v1_0);

            using (VirtualDriveLock fileLock = new VirtualDriveLock(file.FullName, AccessObserver.AccessType.Write))
            {
                int tagSize = TagSize(tag);
                tag.Codec.Header.Size = tagSize - tag.Codec.Header.HeaderSize;

                if (VirtualDrive.ExistsFile(file.FullName))
                {
                    Rewriter rewriter = new Rewriter(strategy);
                    int      padding  = rewriter.Rewrite(tagSize, file);

                    if (padding != tagSize)
                    {
                        tag.Codec.Header.Size = padding - tag.Codec.Header.HeaderSize;
                    }
                }

                using (Writer writer = new Writer(file))
                {
                    tag.Write(writer);
                }
            }
        }
Exemplo n.º 5
0
        public static void Test_RelativeFileMove_MoveDirectory()
        {
            string[] srcFiles =
            {
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder0\file0.bin"),
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder0\folder0\file0.bin"),
            };
            string[] dstFiles =
            {
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder1\file0.bin"),
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder1\folder0\file0.bin"),
            };
            srcFiles.ForEach(n => VirtualDrive.Store(VirtualDrive.VirtualFileName(n), null));

            srcFiles.ForEach(n => UnitTest.Test(VirtualDrive.ExistsFile(n)));
            dstFiles.ForEach(n => UnitTest.Test(!VirtualDrive.ExistsFile(n)));

            SafeOperations.MoveDirectory(
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder0"),
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder1"));

            srcFiles.ForEach(n => UnitTest.Test(!VirtualDrive.ExistsFile(n)));
            dstFiles.ForEach(n => UnitTest.Test(VirtualDrive.ExistsFile(n)));

            VirtualDrive.DeleteDirectory(VirtualDrive.VirtualFileName("Test_RelativeFileMove_Move"), true);
        }
Exemplo n.º 6
0
        private void MoveToRecycleBin(string id)
        {
            SerializedCommand cmd;

            if (VirtualDrive.ExistsDirectory(id))
            {
                cmd = CreateDeleteCommand(new DirectoryInfo(id));
            }
            else if (VirtualDrive.ExistsFile(id))
            {
                cmd = CreateDeleteCommand(new FileInfo(id));
            }
            else
            {
                throw new Exception("\"" + id + "\" does not exist!");
            }

            ProcessCommand(cmd);

            if (!Object.ReferenceEquals(UndoFile, null))
            {
                UndoFile.Write(CreateUndoCommand(cmd));
                UndoFile.Write(cmd);
            }
        }
Exemplo n.º 7
0
        private static void TestMoveDir()
        {
            string undoFileName = VirtualDrive.VirtualFileName(
                "TestFileCopyProcessorUndoFile.txt");

            string srcDir   = VirtualDrive.VirtualFileName(@"srcFolder\folder0");
            string srcFile0 = Path.Combine(srcDir, "t0.bin");
            string srcFile1 = Path.Combine(srcDir, "t1.bin");

            string dstDir   = VirtualDrive.VirtualFileName(@"dstFolder\folder1");
            string dstFile0 = Path.Combine(dstDir, "t0.bin");
            string dstFile1 = Path.Combine(dstDir, "t1.bin");

            VirtualDrive.Store(VirtualDrive.VirtualFileName(srcFile0), null);
            VirtualDrive.Store(VirtualDrive.VirtualFileName(srcFile1), null);

            UnitTest.Test(VirtualDrive.ExistsDirectory(srcDir));
            UnitTest.Test(!VirtualDrive.ExistsDirectory(dstDir));
            UnitTest.Test(VirtualDrive.ExistsFile(srcFile0));
            UnitTest.Test(VirtualDrive.ExistsFile(srcFile1));

            using (UndoFileWriter undoFileWriter = new UndoFileWriter(undoFileName))
            {
                FileOperationProcessor p = new FileOperationProcessor();
                p.Operation = FileOperationProcessor.FileOperation.Move;
                p.UndoFile  = undoFileWriter;
                p.NewName   = dstDir;

                p.Process(new DirectoryInfo(srcDir));
            }

            UnitTest.Test(!VirtualDrive.ExistsDirectory(srcDir));
            UnitTest.Test(VirtualDrive.ExistsDirectory(dstDir));
            UnitTest.Test(VirtualDrive.ExistsFile(dstFile0));
            UnitTest.Test(VirtualDrive.ExistsFile(dstFile1));

            UndoFilePlayer.Undo(undoFileName);

            UnitTest.Test(VirtualDrive.ExistsDirectory(srcDir));
            UnitTest.Test(!VirtualDrive.ExistsDirectory(dstDir));
            UnitTest.Test(VirtualDrive.ExistsFile(srcFile0));
            UnitTest.Test(VirtualDrive.ExistsFile(srcFile1));
            UnitTest.Test(!VirtualDrive.ExistsFile(dstFile0));
            UnitTest.Test(!VirtualDrive.ExistsFile(dstFile1));

            UndoFilePlayer.Redo(undoFileName);

            UnitTest.Test(!VirtualDrive.ExistsDirectory(srcDir));
            UnitTest.Test(VirtualDrive.ExistsDirectory(dstDir));
            UnitTest.Test(!VirtualDrive.ExistsFile(srcFile0));
            UnitTest.Test(!VirtualDrive.ExistsFile(srcFile1));
            UnitTest.Test(VirtualDrive.ExistsFile(dstFile0));
            UnitTest.Test(VirtualDrive.ExistsFile(dstFile1));

            VirtualDrive.DeleteDirectory(dstDir, true);
        }
Exemplo n.º 8
0
        private static void TestCopyDir()
        {
            string undoFileName = VirtualDrive.VirtualFileName(
                "TestFileCopyProcessorUndoFile.txt");

            string folder0    = VirtualDrive.VirtualFileName("folder0");
            string filename00 = Path.Combine(folder0, "t0.bin");
            string filename01 = Path.Combine(folder0, "t1.bin");

            string folder1    = VirtualDrive.VirtualFileName("folder1");
            string filename10 = Path.Combine(folder1, "t0.bin");
            string filename11 = Path.Combine(folder1, "t1.bin");

            VirtualDrive.Store(VirtualDrive.VirtualFileName(filename00), null);
            VirtualDrive.Store(VirtualDrive.VirtualFileName(filename01), null);

            UnitTest.Test(VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(!VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(VirtualDrive.ExistsFile(filename00));
            UnitTest.Test(VirtualDrive.ExistsFile(filename01));

            using (UndoFileWriter undoFileWriter = new UndoFileWriter(undoFileName))
            {
                FileOperationProcessor p = new FileOperationProcessor();
                p.Operation = FileOperationProcessor.FileOperation.Copy;
                p.UndoFile  = undoFileWriter;
                p.NewName   = folder1;

                p.Process(new DirectoryInfo(folder0));
            }

            UnitTest.Test(VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(VirtualDrive.ExistsFile(filename10));
            UnitTest.Test(VirtualDrive.ExistsFile(filename11));

            UndoFilePlayer.Undo(undoFileName);

            UnitTest.Test(VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(!VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(VirtualDrive.ExistsFile(filename00));
            UnitTest.Test(VirtualDrive.ExistsFile(filename01));
            UnitTest.Test(!VirtualDrive.ExistsFile(filename10));
            UnitTest.Test(!VirtualDrive.ExistsFile(filename11));

            UndoFilePlayer.Redo(undoFileName);

            UnitTest.Test(VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(VirtualDrive.ExistsFile(filename10));
            UnitTest.Test(VirtualDrive.ExistsFile(filename11));

            VirtualDrive.DeleteDirectory(folder0, true);
            VirtualDrive.DeleteDirectory(folder1, true);
        }
Exemplo n.º 9
0
 private static void CheckMpegOffset(FileInfo file)
 {
     if (VirtualDrive.ExistsFile(file.FullName))
     {
         long offset = OffsetTagToMpegHeader(file);
         if (offset > 0)
         {
             Logger.WriteLine(Tokens.Warning, file.FullName + " has MPEG offset " + offset);
         }
     }
 }
Exemplo n.º 10
0
 public static int TagSizeV1(FileInfo file)
 {
     if (VirtualDrive.ExistsFile(file.FullName) && HasTagV1(file))
     {
         return(HeaderV1.totalSize);
     }
     else
     {
         return(0);
     }
 }
Exemplo n.º 11
0
        private static void TestMoveFile_AlreadyExists_Overwrite()
        {
            SetupRecycleBin();

            string undoFileName = VirtualDrive.VirtualFileName(
                "TestMoveFile_AlreadyExists_Overwrite.txt");

            string folder0   = VirtualDrive.VirtualFileName("folder0");
            string filename0 = Path.Combine(folder0, "t0.bin");
            string filename1 = Path.Combine(folder0, "t1.bin");

            string recycleBin   = VirtualDrive.VirtualFileName(@"recycle");
            string recycleFile0 = Path.Combine(recycleBin, "1.trash");

            byte[] data0 = new byte[] { 0 };
            VirtualDrive.Store(filename0, data0);

            byte[] data1 = new byte[] { 1 };
            VirtualDrive.Store(filename1, data1);

            UnitTest.Test(VirtualDrive.ExistsFile(filename0));
            UnitTest.Test(VirtualDrive.ExistsFile(filename1));
            UnitTest.Test(!VirtualDrive.ExistsFile(recycleFile0));

            using (UndoFileWriter undoFileWriter = new UndoFileWriter(undoFileName))
            {
                FileOperationProcessor p = new FileOperationProcessor();
                p.Operation = FileOperationProcessor.FileOperation.Move;
                p.UndoFile  = undoFileWriter;
                p.NewName   = "t1.bin";
                p.Conflicts = FileOperationProcessor.ConflictSolving.Overwrite;

                p.Process(new FileInfo(filename0));
            }

            UnitTest.Test(!VirtualDrive.ExistsFile(filename0));
            UnitTest.Test(VirtualDrive.ExistsFile(filename1));
            UnitTest.Test(VirtualDrive.ExistsFile(recycleFile0));
            UnitTest.Test(VirtualDrive.Load(filename1).SequenceEqual(data0));

            UndoFilePlayer.Undo(undoFileName);

            UnitTest.Test(VirtualDrive.ExistsFile(filename0));
            UnitTest.Test(VirtualDrive.ExistsFile(filename1));
            UnitTest.Test(!VirtualDrive.ExistsFile(recycleFile0));

            UndoFilePlayer.Redo(undoFileName);

            UnitTest.Test(!VirtualDrive.ExistsFile(filename0));
            UnitTest.Test(VirtualDrive.ExistsFile(filename1));
            UnitTest.Test(VirtualDrive.ExistsFile(recycleFile0));
        }
Exemplo n.º 12
0
        public static void Test_RelativeFileMove_MoveDirectoryOperations()
        {
            string[] srcFiles =
            {
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder0\file0.bin"),
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder0\folder0\file0.bin"),
            };
            string[] dstFiles =
            {
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder1\file0.bin"),
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder1\folder0\file0.bin"),
            };
            srcFiles.ForEach(n => VirtualDrive.Store(VirtualDrive.VirtualFileName(n), null));

            IEnumerable <IFileSystemOperation> operations = SafeOperations.MoveDirectoryOperations(
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder0"),
                VirtualDrive.VirtualFileName(@"Test_RelativeFileMove_Move\folder1"));

            IEnumerable <string> expected = new string[]
            {
                "Create directory \"\\\\virtualdrive\\Test_RelativeFileMove_Move\\folder1\"",
                "Create directory \"\\\\virtualdrive\\Test_RelativeFileMove_Move\\folder1\\folder0\"",
                "Move file \"\\\\virtualdrive\\Test_RelativeFileMove_Move\\folder0\\folder0\\file0.bin\" to \"\\\\virtualdrive\\Test_RelativeFileMove_Move\\folder1\\folder0\\file0.bin\"",
                "Move file \"\\\\virtualdrive\\Test_RelativeFileMove_Move\\folder0\\file0.bin\" to \"\\\\virtualdrive\\Test_RelativeFileMove_Move\\folder1\\file0.bin\"",
                "Delete directory \"\\\\virtualdrive\\Test_RelativeFileMove_Move\\folder0\\folder0\"",
                "Delete directory \"\\\\virtualdrive\\Test_RelativeFileMove_Move\\folder0\""
            };

            UnitTest.Test(operations.Select(n => n.ToString()).SequenceEqual(expected));

            srcFiles.ForEach(n => UnitTest.Test(VirtualDrive.ExistsFile(n)));
            dstFiles.ForEach(n => UnitTest.Test(!VirtualDrive.ExistsFile(n)));

            foreach (var operation in operations)
            {
                operation.Do();
            }

            srcFiles.ForEach(n => UnitTest.Test(!VirtualDrive.ExistsFile(n)));
            dstFiles.ForEach(n => UnitTest.Test(VirtualDrive.ExistsFile(n)));

            foreach (var operation in operations.Reverse())
            {
                operation.Undo();
            }

            srcFiles.ForEach(n => UnitTest.Test(VirtualDrive.ExistsFile(n)));
            dstFiles.ForEach(n => UnitTest.Test(!VirtualDrive.ExistsFile(n)));

            VirtualDrive.DeleteDirectory(VirtualDrive.VirtualFileName("Test_RelativeFileMove_Move"), true);
        }
Exemplo n.º 13
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            if (e.Args.Length == 1 &&
                (VirtualDrive.ExistsDirectory(e.Args[0]) || VirtualDrive.ExistsFile(e.Args[0])))
            {
                startupPath = e.Args[0];
            }

            CoreControls.Preferences.AppPreferences.Load(AppName);

            ApplySkin(new Uri("/CoreControls;component/resources/BaseSkin.xaml", UriKind.Relative));
        }
Exemplo n.º 14
0
        public static int TagSizeV2(FileInfo file)
        {
            if (VirtualDrive.ExistsFile(file.FullName) && HasTagV2(file))
            {
                HeaderV2 header = new HeaderV2();
                using (Reader reader = new Reader(file))
                {
                    header.Read(reader);
                }
                return(header.TotalSize);
            }

            return(0);
        }
Exemplo n.º 15
0
 private static void ProcessDelete(SerializedCommand command)
 {
     if (VirtualDrive.ExistsDirectory(command.Data[0]))
     {
         VirtualDrive.DeleteDirectory(command.Data[0], true);
     }
     else if (VirtualDrive.ExistsFile(command.Data[0]))
     {
         VirtualDrive.DeleteFile(command.Data[0]);
     }
     else
     {
         throw new Exception("\"" + command.Data[0] + "\" does not exist!");
     }
 }
Exemplo n.º 16
0
 private static void ProcessCopy(SerializedCommand command)
 {
     if (VirtualDrive.ExistsDirectory(command.Data[0]))
     {
         //CoreVirtualDrive.FileSystemOperations.SafeOperations.CopyDirectory(command.Data[0], command.Data[1]);
         VirtualDrive.CopyDirectory(command.Data[0], command.Data[1]);
     }
     else if (VirtualDrive.ExistsFile(command.Data[0]))
     {
         //CoreVirtualDrive.FileSystemOperations.SafeOperations.CopyFile(command.Data[0], command.Data[1]);
         VirtualDrive.CopyFile(command.Data[0], command.Data[1]);
     }
     else
     {
         throw new Exception("\"" + command.Data[0] + "\" does not exist!");
     }
 }
Exemplo n.º 17
0
        private static bool AlreadyExists(string src, string dst)
        {
            if (VirtualDrive.ExistsDirectory(src))
            {
                if (VirtualDrive.ExistsDirectory(dst) &&
                    !src.Equals(dst, StringComparison.CurrentCultureIgnoreCase))
                {
                    return(true);
                }
            }
            else
            {
                if (VirtualDrive.ExistsFile(dst) &&
                    !src.Equals(dst, StringComparison.CurrentCultureIgnoreCase))
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 18
0
        private static void TestCopyFile()
        {
            string undoFileName = VirtualDrive.VirtualFileName(
                "TestFileCopyProcessorUndoFile.txt");

            string folder0   = VirtualDrive.VirtualFileName("folder0");
            string filename0 = Path.Combine(folder0, "t0.bin");
            string filename1 = Path.Combine(folder0, "t1.bin");

            byte[] data = new byte[] { 0 };
            VirtualDrive.Store(filename0, data);

            UnitTest.Test(VirtualDrive.ExistsFile(filename0));
            UnitTest.Test(!VirtualDrive.ExistsFile(filename1));

            using (UndoFileWriter undoFileWriter = new UndoFileWriter(undoFileName))
            {
                FileOperationProcessor p = new FileOperationProcessor();
                p.Operation = FileOperationProcessor.FileOperation.Copy;
                p.UndoFile  = undoFileWriter;
                p.NewName   = "t1.bin";

                p.Process(new FileInfo(filename0));
            }

            UnitTest.Test(VirtualDrive.ExistsFile(filename0));
            UnitTest.Test(VirtualDrive.ExistsFile(filename1));

            UndoFilePlayer.Undo(undoFileName);

            UnitTest.Test(VirtualDrive.ExistsFile(filename0));
            UnitTest.Test(!VirtualDrive.ExistsFile(filename1));

            UndoFilePlayer.Redo(undoFileName);

            UnitTest.Test(VirtualDrive.ExistsFile(filename0));
            UnitTest.Test(VirtualDrive.ExistsFile(filename1));

            VirtualDrive.DeleteDirectory(folder0, true);
        }
Exemplo n.º 19
0
        private static void TestMoveDir_AlreadyExists_Overwrite()
        {
            SetupRecycleBin();

            string undoFileName = VirtualDrive.VirtualFileName(
                "TestFileCopyProcessorUndoFile.txt");

            string folder0 = VirtualDrive.VirtualFileName(@"fold00\folder0");
            string folder1 = VirtualDrive.VirtualFileName(@"fold01\folder1");

            string srcFile0     = Path.Combine(folder0, "t0.bin");
            string replaceFile0 = Path.Combine(folder1, "t1.bin");
            string dstFile0     = Path.Combine(folder1, "t0.bin");

            string recycleBin   = VirtualDrive.VirtualFileName(@"recycle");
            string recycleFile0 = Path.Combine(Path.Combine(recycleBin, "0"), "t1.bin");

            VirtualDrive.Store(VirtualDrive.VirtualFileName(srcFile0), null);
            VirtualDrive.Store(VirtualDrive.VirtualFileName(replaceFile0), null);

            UnitTest.Test(VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(VirtualDrive.ExistsFile(srcFile0));
            UnitTest.Test(!VirtualDrive.ExistsFile(dstFile0));
            UnitTest.Test(VirtualDrive.ExistsFile(replaceFile0));
            UnitTest.Test(!VirtualDrive.ExistsFile(recycleFile0));

            using (UndoFileWriter undoFileWriter = new UndoFileWriter(undoFileName))
            {
                FileOperationProcessor p = new FileOperationProcessor();
                p.Operation = FileOperationProcessor.FileOperation.Move;
                p.UndoFile  = undoFileWriter;
                p.NewName   = folder1;
                p.Conflicts = FileOperationProcessor.ConflictSolving.Overwrite;

                p.Process(new DirectoryInfo(folder0));
            }

            UnitTest.Test(!VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(!VirtualDrive.ExistsFile(srcFile0));
            UnitTest.Test(VirtualDrive.ExistsFile(dstFile0));
            UnitTest.Test(!VirtualDrive.ExistsFile(replaceFile0));
            UnitTest.Test(VirtualDrive.ExistsFile(recycleFile0));

            UndoFilePlayer.Undo(undoFileName);

            UnitTest.Test(VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(VirtualDrive.ExistsFile(srcFile0));
            UnitTest.Test(!VirtualDrive.ExistsFile(dstFile0));
            UnitTest.Test(VirtualDrive.ExistsFile(replaceFile0));
            UnitTest.Test(!VirtualDrive.ExistsFile(recycleFile0));

            UndoFilePlayer.Redo(undoFileName);

            UnitTest.Test(!VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(!VirtualDrive.ExistsFile(srcFile0));
            UnitTest.Test(VirtualDrive.ExistsFile(dstFile0));
            UnitTest.Test(!VirtualDrive.ExistsFile(replaceFile0));
            UnitTest.Test(VirtualDrive.ExistsFile(recycleFile0));

            VirtualDrive.DeleteDirectory(folder1, true);
            VirtualDrive.DeleteDirectory(recycleBin, true);
        }
Exemplo n.º 20
0
        private static void TestMoveDir_AlreadyExists_Skip()
        {
            string undoFileName = VirtualDrive.VirtualFileName(
                "TestMoveDir_AlreadyExists_Skip.txt");

            string folder0    = VirtualDrive.VirtualFileName(@"fold00\folder0");
            string filename00 = Path.Combine(folder0, "t0.bin");
            string filename01 = Path.Combine(folder0, "t1.bin");

            string folder1    = VirtualDrive.VirtualFileName(@"fold01\folder1");
            string filename10 = Path.Combine(folder1, "t0.bin");
            string filename11 = Path.Combine(folder1, "t1.bin");

            VirtualDrive.Store(VirtualDrive.VirtualFileName(filename00), null);
            VirtualDrive.Store(VirtualDrive.VirtualFileName(filename01), null);
            VirtualDrive.Store(VirtualDrive.VirtualFileName(filename10), null);

            UnitTest.Test(VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(VirtualDrive.ExistsFile(filename00));
            UnitTest.Test(VirtualDrive.ExistsFile(filename01));
            UnitTest.Test(VirtualDrive.ExistsFile(filename10));
            UnitTest.Test(!VirtualDrive.ExistsFile(filename11));

            using (UndoFileWriter undoFileWriter = new UndoFileWriter(undoFileName))
            {
                FileOperationProcessor p = new FileOperationProcessor();
                p.Operation = FileOperationProcessor.FileOperation.Move;
                p.UndoFile  = undoFileWriter;
                p.NewName   = folder1;
                p.Conflicts = FileOperationProcessor.ConflictSolving.Skip;

                p.Process(new DirectoryInfo(folder0));
            }

            UnitTest.Test(VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(VirtualDrive.ExistsFile(filename00));
            UnitTest.Test(VirtualDrive.ExistsFile(filename01));
            UnitTest.Test(VirtualDrive.ExistsFile(filename10));
            UnitTest.Test(!VirtualDrive.ExistsFile(filename11));

            UndoFilePlayer.Undo(undoFileName);

            UnitTest.Test(VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(VirtualDrive.ExistsFile(filename00));
            UnitTest.Test(VirtualDrive.ExistsFile(filename01));
            UnitTest.Test(VirtualDrive.ExistsFile(filename10));
            UnitTest.Test(!VirtualDrive.ExistsFile(filename11));

            UndoFilePlayer.Redo(undoFileName);

            UnitTest.Test(VirtualDrive.ExistsDirectory(folder0));
            UnitTest.Test(VirtualDrive.ExistsDirectory(folder1));
            UnitTest.Test(VirtualDrive.ExistsFile(filename00));
            UnitTest.Test(VirtualDrive.ExistsFile(filename01));
            UnitTest.Test(VirtualDrive.ExistsFile(filename10));
            UnitTest.Test(!VirtualDrive.ExistsFile(filename11));

            VirtualDrive.DeleteDirectory(folder0, true);
            VirtualDrive.DeleteDirectory(folder1, true);
        }