mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-02-14 21:23:38 +00:00
So that when working with ArchiveFactory, you can cast the opened archive to IWritableArchive for accessing AddEntry, RemoveEntry and SaveTo methods without having to know what type of archive is opened underhood. Also moved extension methods from AbstractWritableArchive to this new interface. Also added GZipArchive to ArchiveFactory.Create as it is one of the 3 writable archive types (zip, tar, gzip), not sure why it was omitted.
84 lines
3.4 KiB
C#
84 lines
3.4 KiB
C#
using System;
|
|
using System.IO;
|
|
using SharpCompress.Common;
|
|
|
|
namespace SharpCompress.Archive
|
|
{
|
|
public static class IWritableArchiveExtensions
|
|
{
|
|
public static void SaveTo(this IWritableArchive writableArchive,
|
|
Stream stream, CompressionType compressionType)
|
|
{
|
|
writableArchive.SaveTo(stream, new CompressionInfo {Type = compressionType});
|
|
}
|
|
|
|
#if !PORTABLE && !NETFX_CORE
|
|
|
|
public static void AddEntry(this IWritableArchive writableArchive,
|
|
string entryPath, string filePath)
|
|
{
|
|
var fileInfo = new FileInfo(filePath);
|
|
if (!fileInfo.Exists)
|
|
{
|
|
throw new FileNotFoundException("Could not AddEntry: " + filePath);
|
|
}
|
|
writableArchive.AddEntry(entryPath, new FileInfo(filePath).OpenRead(), true, fileInfo.Length,
|
|
fileInfo.LastWriteTime);
|
|
}
|
|
|
|
public static void SaveTo(this IWritableArchive writableArchive,
|
|
string filePath, CompressionType compressionType)
|
|
{
|
|
writableArchive.SaveTo(new FileInfo(filePath), new CompressionInfo {Type = compressionType});
|
|
}
|
|
|
|
public static void SaveTo(this IWritableArchive writableArchive,
|
|
FileInfo fileInfo, CompressionType compressionType)
|
|
{
|
|
using (var stream = fileInfo.Open(FileMode.Create, FileAccess.Write))
|
|
{
|
|
writableArchive.SaveTo(stream, new CompressionInfo {Type = compressionType});
|
|
}
|
|
}
|
|
|
|
public static void SaveTo(this IWritableArchive writableArchive,
|
|
string filePath, CompressionInfo compressionInfo)
|
|
{
|
|
writableArchive.SaveTo(new FileInfo(filePath), compressionInfo);
|
|
}
|
|
|
|
public static void SaveTo(this IWritableArchive writableArchive,
|
|
FileInfo fileInfo, CompressionInfo compressionInfo)
|
|
{
|
|
using (var stream = fileInfo.Open(FileMode.Create, FileAccess.Write))
|
|
{
|
|
writableArchive.SaveTo(stream, compressionInfo);
|
|
}
|
|
}
|
|
|
|
public static void AddAllFromDirectory(
|
|
this IWritableArchive writableArchive,
|
|
string filePath, string searchPattern = "*.*", SearchOption searchOption = SearchOption.AllDirectories)
|
|
{
|
|
#if NET2
|
|
foreach (var path in Directory.GetFiles(filePath, searchPattern, searchOption))
|
|
#else
|
|
foreach (var path in Directory.EnumerateFiles(filePath, searchPattern, searchOption))
|
|
#endif
|
|
{
|
|
var fileInfo = new FileInfo(path);
|
|
writableArchive.AddEntry(path.Substring(filePath.Length), fileInfo.OpenRead(), true, fileInfo.Length,
|
|
fileInfo.LastWriteTime);
|
|
}
|
|
}
|
|
public static IArchiveEntry AddEntry(this IWritableArchive writableArchive, string key, FileInfo fileInfo)
|
|
{
|
|
if (!fileInfo.Exists)
|
|
{
|
|
throw new ArgumentException("FileInfo does not exist.");
|
|
}
|
|
return writableArchive.AddEntry(key, fileInfo.OpenRead(), true, fileInfo.Length, fileInfo.LastWriteTime);
|
|
}
|
|
#endif
|
|
}
|
|
} |