public static void Extract(FileArchive archive, string outDir) { foreach (FileInfo fileInfo in archive.FileInfo.Where(x => !string.IsNullOrWhiteSpace(x.Filename))) { string filename = Path.Combine(outDir, fileInfo.Filename.TrimStart('/')); string dir = Path.GetDirectoryName(filename) ?? throw new InvalidOperationException(); Directory.CreateDirectory(dir); using (var outStream = new FileStream(filename, FileMode.Create, FileAccess.Write)) { archive.OutputFile(fileInfo, outStream); } } }