cs11dotnet7/vscode/Chapter09/WorkingWithTarArchives/Program.cs

66 lines
1.9 KiB
C#
Raw Normal View History

2022-09-19 11:50:44 +02:00
using System.Formats.Tar; // TarFile
try
{
string current = Environment.CurrentDirectory;
WriteInformation($"Current directory: {current}");
string sourceDirectory = Path.Combine(current, "images");
string destinationDirectory = Path.Combine(current, "extracted");
string tarFile = Path.Combine(current, "images-archive.tar");
if (!Directory.Exists(sourceDirectory))
{
WriteError($"The {sourceDirectory} directory must exist. Please create it and add some files to it.");
return;
}
if (File.Exists(tarFile))
{
// If the Tar archive file already exists then we must delete it.
File.Delete(tarFile);
WriteWarning($"{tarFile} already existed so it was deleted.");
}
WriteInformation(
$"Archiving directory: {sourceDirectory}\n To .tar file: {tarFile}");
TarFile.CreateFromDirectory(
sourceDirectoryName: sourceDirectory,
destinationFileName: tarFile,
includeBaseDirectory: true);
WriteInformation($"Does {tarFile} exist? {File.Exists(tarFile)}.");
if (!Directory.Exists(destinationDirectory))
{
// If the destination directory does not exist then we must create
// it before extracting a Tar archive to it.
Directory.CreateDirectory(destinationDirectory);
WriteWarning($"{destinationDirectory} did not exist so it was created.");
}
WriteInformation(
$"Extracting archive: {tarFile}\n To directory: {destinationDirectory}");
TarFile.ExtractToDirectory(
sourceFileName: tarFile,
destinationDirectoryName: destinationDirectory,
overwriteFiles: true);
if (Directory.Exists(destinationDirectory))
{
foreach (string dir in Directory.GetDirectories(destinationDirectory))
{
WriteInformation(
$"Extracted directory {dir} containing these files: " +
string.Join(',', Directory.EnumerateFiles(dir)
.Select(file => Path.GetFileName(file))));
}
}
}
catch (Exception ex)
{
WriteError(ex.Message);
}