public PreparedFolder Copy()
        {
            var folder = new PreparedFolder(this.Name);

            folder.Files.AddRange(this.Files.Select(item => new PreparedFile(item.Name)));
            folder.Folders.AddRange(this.Folders.Select(item => item.Copy()));

            return(folder);
        }
            private PreparedFolder read(string path, Progress progress)
            {
                string folderName = Path.GetFileName(path);
                var    folder     = new PreparedFolder(folderName);

                raiseProgressChanged(progress.Next(), folderName);

                folder.Files.AddRange(Directory.GetFiles(path)
                                      .Select(Path.GetFileName)
                                      .Select(item => new PreparedFile(item)));
                foreach (var subPath in Directory.GetDirectories(path))
                {
                    folder.Folders.Add(read(subPath, progress));
                }

                return(folder);
            }