//[SetUp]
        public void GlobalSetUp()
        {
            if (_EnvironmentInitialised == false)
            {

                DirectoryInfo difo = new DirectoryInfo(Path.GetFullPath(@"..\..\TestFolders\InFolder"));
                if (difo.Exists)
                {
                    difo.RemoveReadOnly();
                    difo.Empty(true);
                }

                difo = new DirectoryInfo(Path.GetFullPath(@"..\..\TestFolders\OutFolder"));
                if (difo.Exists)
                {
                    difo.RemoveReadOnly();
                    difo.Empty(true);
                }

                DirectoryInfo dif = new DirectoryInfo(Path.GetFullPath(@"..\..\TestFolders\InToBeCopied"));
                dif.Copy(Path.GetFullPath(@"..\..\TestFolders\InFolder"));

                difo = new DirectoryInfo(Path.GetFullPath(@"..\..\TestFolders\InFolder"));
                difo.RemoveReadOnly();

                _MFH = new MusicFolderHelper(Path.GetFullPath(@"..\..\TestFolders\OutFolder"));
                CleanDirectories(_MFH);

                _MFH = new MusicFolderHelper(Path.GetFullPath(@"..\..\TestFolders\OutFolder"));
                _EnvironmentInitialised = true;
            }
        }
        private void CleanDirectories(MusicFolderHelper imfh)
        {
            DirectoryInfo di = new DirectoryInfo(imfh.Cache);
            di.RemoveReadOnly();
            di.Empty(true);

            GC.Collect();
            GC.WaitForPendingFinalizers();

            DirectoryInfo diroot = new DirectoryInfo(imfh.Root);
            diroot.RemoveReadOnly();
            diroot.Empty(true);
        }
        protected void Reinitialize()
        {
            CleanDirectories(false);

            DirectoryInfo root = new DirectoryInfo(Root);
            root.RemoveReadOnly();
            root.Empty(true);

            DirectoryInfo In = new DirectoryInfo(DirectoryIn);
            In.RemoveReadOnly();
            In.Empty(true);

            string Pathentry = Path.Combine(Path.GetFullPath(@"..\..\TestFolders\InToBeCopied"), this.CopyName);

            DirectoryInfo dif = new DirectoryInfo(Pathentry);
            dif.Copy(DirectoryIn);

            In = new DirectoryInfo(DirectoryIn);
            In.RemoveReadOnly();

            _SK = GetKeys();

            CopyDBIfNeeded();


        }
        protected void CleanDirectories(bool tot = true)
        {
            DirectoryInfo di = new DirectoryInfo(Cache);
            di.RemoveReadOnly();
            di.Empty(true);

           

            GC.Collect();
            GC.WaitForPendingFinalizers();

            if (tot)
            {
                DirectoryInfo diroot = new DirectoryInfo(Root);
                diroot.RemoveReadOnly();
                diroot.Empty(true);
                //Directory.Delete(Root, true);

                //while (diroot.Exists)
                //{
                //    System.Threading.Thread.Sleep(200);
                //    di.Refresh();
                //}
            }
        }
        protected void Init()
        {

            _MFH = new MusicFolderHelper(DirectoryOut);
            //_SK = GetKeys();
            DirectoryIn = Path.Combine(RootDirectoryIn, InputDirectorySimpleName);
 
            object[] PIs = this.GetType().GetCustomAttributes(typeof(TestFolderAttribute), false);

            if ((PIs != null) && (PIs.Length > 0))
            {
                TestFolderAttribute tfa = PIs[0] as TestFolderAttribute;
                if (!Directory.Exists(DirectoryIn))
                {
                    Directory.CreateDirectory(DirectoryIn);
                }

                CopyName = tfa.InFolderName ?? InputDirectorySimpleName;
                CopyNameDB = tfa.DBFolderName ?? InputDirectorySimpleName;


                DirectoryInfo dif = new DirectoryInfo(Path.Combine(Path.GetFullPath(@"..\..\TestFolders\InToBeCopied"), CopyName));
                dif.Copy(DirectoryIn);


                dif = new DirectoryInfo(DirectoryIn);
                dif.RemoveReadOnly();


                //IsOverride = true;
            }
            else
            {
                CopyName = InputDirectorySimpleName;
                CopyNameDB = InputDirectorySimpleName;
            }

            CopyDBIfNeeded();

            _SK = GetKeys();
            
            OldAlbums = new List<IList<ExportAlbum>>();

            bool continu = true;
            int i = 0;

            while (continu)
            {
                string iPath = Path.Combine(DirectoryIn, string.Format("AlbumRef{0}.xml", i++));
                if (File.Exists(iPath))
                {
                    OldAlbums.Add(ExportAlbums.Import(iPath, false, String.Empty, null));
                }
                else
                    continu = false;
            }


            Albums = new List<IList<AlbumDescriptor>>();

            continu = true;
            i = 0;

            while (continu)
            {
                string iPath = Path.Combine(DirectoryIn, string.Format("Album{0}.xml", i++));
                if (File.Exists(iPath))
                {
                    Albums.Add(AlbumDescriptorExchanger.Import(iPath, false, String.Empty, null));
                }
                else
                    continu = false;
            }

            Albums.SelectMany(o => o).SelectMany(u => u.RawTrackDescriptors.Select(t => new Tuple<AlbumDescriptor, TrackDescriptor>(u, t))).Apply(o => Assert.That(o.Item1, Is.EqualTo(o.Item2.AlbumDescriptor)));

        }