private void UpdateFullName() { D2pDirectory current = this; this.FullName = current.Name; while (current.Parent != null) { this.FullName = this.FullName.Insert(0, current.Parent.Name + "\\"); current = current.Parent; } }
private void InternalRemoveDirectories(D2pEntry entry) { for (D2pDirectory current = entry.Directory; current != null; current = current.Parent) { current.Entries.Remove(entry); if (current.Parent != null && current.Entries.Count == 0) { current.Parent.Directories.Remove(current); } else { if (current.IsRoot && current.Entries.Count == 0) { this.m_rootDirectories.Remove(current); } } } }
public void ExtractDirectory(string directoryName, string destination) { if (!this.HasDirectory(directoryName)) { throw new InvalidOperationException(string.Format("Directory {0} does not exist", directoryName)); } D2pDirectory directory = this.TryGetDirectory(directoryName); if (!Directory.Exists(Path.GetDirectoryName(Path.Combine(destination, directory.FullName)))) { Directory.CreateDirectory(Path.GetDirectoryName(Path.Combine(destination, directory.FullName))); } foreach (D2pEntry entry in directory.Entries) { this.ExtractFile(entry.FullFileName, Path.Combine(destination, entry.FullFileName), false); } foreach (D2pDirectory pDirectory in directory.Directories) { this.ExtractDirectory(pDirectory.FullName, destination); } }
public D2pDirectory[] GetDirectoriesTree(string directory) { List <D2pDirectory> result = new List <D2pDirectory>(); string[] directoriesName = directory.Split(new char[] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries); D2pDirectory[] result2; if (directoriesName.Length == 0) { result2 = new D2pDirectory[0]; } else { D2pDirectory current = this.m_rootDirectories.SingleOrDefault((D2pDirectory entry) => entry.Name == directoriesName[0]); if (current == null) { result2 = new D2pDirectory[0]; } else { result.Add(current); foreach (string dir in directoriesName.Skip(1)) { if (!current.HasDirectory(dir)) { result2 = result.ToArray(); return(result2); } current = current.TryGetDirectory(dir); result.Add(current); } result2 = result.ToArray(); } } return(result2); }
public D2pDirectory TryGetDirectory(string directory) { string[] directoriesName = directory.Split(new char[] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries); D2pDirectory result; if (directoriesName.Length == 0) { result = null; } else { D2pDirectory current = this.m_rootDirectories.SingleOrDefault((D2pDirectory entry) => entry.Name == directoriesName[0]); if (current == null) { result = null; } else { foreach (string dir in directoriesName.Skip(1)) { if (!current.HasDirectory(dir)) { result = null; return(result); } current = current.TryGetDirectory(dir); } result = current; } } return(result); }
private void InternalAddDirectories(D2pEntry entry) { string[] directories = entry.GetDirectoriesName(); if (directories.Length != 0) { D2pDirectory current = null; if (!this.HasDirectory(directories[0])) { current = new D2pDirectory(directories[0]); this.m_rootDirectories.Add(current); } else { current = this.TryGetDirectory(directories[0]); } current.Entries.Add(entry); foreach (string directory in directories.Skip(1)) { if (!current.HasDirectory(directory)) { D2pDirectory dir = new D2pDirectory(directory) { Parent = current }; current.Directories.Add(dir); current = dir; } else { current = current.TryGetDirectory(directory); } current.Entries.Add(entry); } entry.Directory = current; } }