public override void AbstractOpen()
        {
            DirectoriesList.Clear();
            FilesList.Clear();

            using (var arc = ZipFile.Open(AbstractPath,ZipArchiveMode.Update))
            {
                var existingFolders = new List<string>();

                foreach (var item in arc.Entries)
                {
                    if (item.FullName.LastIndexOf(@"/", System.StringComparison.Ordinal) == item.FullName.Length - 1)
                    {
                        if (InnerPath == "")
                        {
                            if (!existingFolders.Contains(item.FullName.Substring(0, item.FullName.IndexOf(@"/", System.StringComparison.Ordinal) + 1)) &&
                                item.FullName.Substring(0, item.FullName.IndexOf(@"/", System.StringComparison.Ordinal) + 1) != "")
                            {
                                var newFolder = new ArchiveFolder(AbstractPath, item.FullName.Substring(0, item.FullName.IndexOf(@"/", System.StringComparison.Ordinal) + 1));
                                DirectoriesList.Add(newFolder);
                                existingFolders.Add(item.FullName.Substring(0, item.FullName.IndexOf(@"/", System.StringComparison.Ordinal) + 1));
                            }
                        }
                        else
                        {
                            if (item.FullName.IndexOf(InnerPath, System.StringComparison.Ordinal) >= 0)
                            {
                                var inPath = item.FullName.Replace(InnerPath, "");
                                if (!existingFolders.Contains(inPath.Substring(0, inPath.IndexOf(@"/", System.StringComparison.Ordinal) + 1)) &&
                                    inPath.Substring(0, inPath.IndexOf(@"/", System.StringComparison.Ordinal) + 1) != "")
                                {
                                    var newFolder = new ArchiveFolder(AbstractPath, item.FullName);
                                    DirectoriesList.Add(newFolder);
                                    existingFolders.Add(inPath.Substring(0, inPath.IndexOf(@"/", System.StringComparison.Ordinal) + 1));
                                }
                            }
                        }
                    }
                    else
                    {
                        if (InnerPath == "")
                        {
                            if (item.FullName.IndexOf(@"/", System.StringComparison.Ordinal) < 0)
                            {
                                var newFile = new ArchiveFile(item.FullName, item);
                                FilesList.Add(newFile);
                            }
                        }
                        else
                        {
                            if (item.FullName.IndexOf(InnerPath, System.StringComparison.Ordinal) >= 0)
                            {
                                var inPath = item.FullName.Replace(InnerPath, "");
                                if (inPath.IndexOf(@"/", System.StringComparison.Ordinal) < 0)
                                {
                                    var newFile = new ArchiveFile(item.FullName, item);
                                    FilesList.Add(newFile);
                                }
                            }
                        }
                    }
                }

            }
        }
 public override AbstractFolder AbstractCreateFolder(string folderName)
 {
     var newFolder = new ArchiveFolder(AbstractPath, InnerPath + folderName);
     return newFolder;
 }