private void UnrollContainers( String targetPath, out List <String> tempContainers, out Stack <ContainerHierarchyEntity> containersHierarchy) { tempContainers = new List <String>(); containersHierarchy = new Stack <ContainerHierarchyEntity>(); IContentFileWriter contentWriter = new ContentFileWriter(); IContainerFile topContainer = ContainerReaderService.ReadFile(targetPath, false); containersHierarchy.Push(new ContainerHierarchyEntity(topContainer)); foreach (var containerPath in CommandGroup.NestedTargetPath.Parts) { var containerFile = containersHierarchy.Peek().ContainerFile; var contentFile = containerFile.GetContentFileByPath(containerPath); //if (contentFile.FileType == ContentFileType.Edata) //{ ContainerReaderService.LoadContent(contentFile); byte[] content = contentFile.Content; //Czytamy z pamięci żeby szybciej było, ale nie łądujemy zawartości żeby oszczedzić miejsce. var virtualContainer = ContainerReaderService.ReadRaw(content, false); //Tutaj mieć na uwadze, że ten sposób pozyskiwania ścieżki jest bardzo podatny na problemy, miejsce wolne itd. String lastPath = Path.Combine(Path.GetDirectoryName(targetPath), Path.GetFileName(contentFile.Path)); contentWriter.Write(lastPath, content); virtualContainer.Path = lastPath; //Tutaj brakuje jakiejś możliwosci zmiany ścieżki dla kontenera //i zmiany stanu z wirtualnego do przechowywanego na dysku. containersHierarchy.Push(new ContainerHierarchyEntity(virtualContainer, containerPath)); tempContainers.Add(lastPath); //} } }
protected void LoadContentFiles(IEnumerable <IContentFile> files) { var notLoadedFiles = files.Where(x => !x.IsContentLoaded); ContainerReaderService.LoadContent(notLoadedFiles); }