static void EnsureDirectories(string name, ICollection <string> dirs, TarOutputStream tar) { var root = Path.GetDirectoryName(name); var parts = root.Split(Path.DirectorySeparatorChar); var path = new StringBuilder(); for (var i = 0; i < parts.Length; i++) { var part = parts[i]; if (string.IsNullOrWhiteSpace(part)) { continue; } if (i != 0) { path.Append(Path.DirectorySeparatorChar); } path.Append(part); var current = path.ToString() + Path.DirectorySeparatorChar; if (dirs.Contains(current)) { continue; } dirs.Add(current); var entry = TarEntry.CreateTarEntry(FixSlash(current)); var header = entry.TarHeader; TarEntry.NameTarHeader(header, FixSlash(current)); header.GroupName = "root"; header.UserName = "******"; header.Mode = GetPermissions(entry.Name, false); tar.PutNextEntry(entry); tar.CloseEntry(); } }