public Presentation(FileInfo file) { var tempRootDir = Path.GetTempPath(); var tempDirName = $"pmpp_{Guid.NewGuid():N}"; while (Directory.Exists(Path.Combine(tempRootDir, tempDirName))) { tempDirName = $"pmpp_{Guid.NewGuid():N}"; } tempDir = Path.Combine(tempRootDir, tempDirName); ZipFile.ExtractToDirectory(file.FullName, tempDir); var archive = new DirectoryInfo(tempDir); var masterFile = archive.GetFiles("master.png").FirstOrDefault(); var files = archive.GetFiles().Where(x => slideRegex.IsMatch(x.Name)).OrderBy(x => x.Name); if (masterFile != null) { Master = ToMemory(Image.FromFile(masterFile.FullName)); } foreach (var slideFile in files) { Slides.AddLast(() => ToMemory(Image.FromFile(slideFile.FullName))); } currentNode = Slides.First; UpdateSlide(); }