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; }