mirror of
https://github.com/MAKS-IT-COM/podman-client-dotnet.git
synced 2026-08-15 14:48:11 +02:00
44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
using System.Text;
|
|
|
|
using ICSharpCode.SharpZipLib.Tar;
|
|
|
|
namespace MaksIT.PodmanClientDotNet.Tests.Archives;
|
|
|
|
public static class Tar {
|
|
public static void CreateTarFromDirectory(string sourceDirectory, Stream outputStream) {
|
|
using var tarOutputStream = new TarOutputStream(outputStream, Encoding.UTF8);
|
|
tarOutputStream.IsStreamOwner = false;
|
|
AddDirectoryFilesToTar(tarOutputStream, sourceDirectory, recursive: true);
|
|
}
|
|
|
|
static void AddDirectoryFilesToTar(
|
|
TarOutputStream tarOutputStream,
|
|
string sourceDirectory,
|
|
bool recursive,
|
|
string? baseDirectory = null
|
|
) {
|
|
baseDirectory ??= sourceDirectory;
|
|
|
|
var directoryInfo = new DirectoryInfo(sourceDirectory);
|
|
|
|
foreach (var fileInfo in directoryInfo.GetFiles()) {
|
|
var relativePath = Path.GetRelativePath(baseDirectory, fileInfo.FullName);
|
|
|
|
var entry = TarEntry.CreateEntryFromFile(fileInfo.FullName);
|
|
entry.Name = relativePath.Replace(Path.DirectorySeparatorChar, '/');
|
|
tarOutputStream.PutNextEntry(entry);
|
|
|
|
using var fileStream = fileInfo.OpenRead();
|
|
fileStream.CopyTo(tarOutputStream);
|
|
|
|
tarOutputStream.CloseEntry();
|
|
}
|
|
|
|
if (!recursive)
|
|
return;
|
|
|
|
foreach (var subDirectory in directoryInfo.GetDirectories())
|
|
AddDirectoryFilesToTar(tarOutputStream, subDirectory.FullName, recursive: true, baseDirectory);
|
|
}
|
|
}
|