Cleaning up some FileInfo non-usage and fixing tests.

This commit is contained in:
Adam Hathcock
2013-12-23 12:15:57 +00:00
parent 4eda2043df
commit e58ec599f0
22 changed files with 63 additions and 157 deletions

View File

@@ -65,7 +65,7 @@ namespace SharpCompress.Test
{
using (var archive = RarArchive.Open(stream))
{
Assert.IsFalse(archive.IsSolidArchive());
Assert.IsFalse(archive.IsSolid);
foreach (var entry in archive.Entries.Where(entry => !entry.IsDirectory))
{
entry.WriteToDirectory(SCRATCH_FILES_PATH,
@@ -132,7 +132,7 @@ namespace SharpCompress.Test
{
using (var archive = RarArchive.Open(stream))
{
Assert.IsFalse(archive.IsSolidArchive());
Assert.IsFalse(archive.IsSolid);
Assert.IsTrue(archive.Entries.Any(entry => entry.IsDirectory));
}
}

View File

@@ -8,16 +8,11 @@ namespace SharpCompress.Archive
{
public static void WriteTo(this IArchiveEntry archiveEntry, Stream streamToWriteTo)
{
if (archiveEntry.Archive.IsSolid)
if (archiveEntry.Archive.Type == ArchiveType.Rar && archiveEntry.Archive.IsSolid)
{
throw new InvalidFormatException("Cannot use Archive random access on SOLID Rar files.");
}
if (archiveEntry.IsEncrypted)
{
throw new PasswordProtectedException("Entry is password protected and cannot be extracted.");
}
if (archiveEntry.IsDirectory)
{
throw new ExtractionException("Entry is a file directory and cannot be extracted.");

View File

@@ -16,6 +16,9 @@ namespace SharpCompress.Archive
/// </summary>
bool IsComplete { get; }
/// <summary>
/// The archive instance this entry belongs to
/// </summary>
IArchive Archive { get; }
}
}

View File

@@ -42,10 +42,5 @@ namespace SharpCompress.Archive.Rar
{
return FileParts;
}
public override FileInfo VolumeFile
{
get { return FileInfo; }
}
}
}

View File

@@ -6,7 +6,7 @@ namespace SharpCompress.Archive.Rar
{
internal class FileInfoRarFilePart : RarFilePart
{
private FileInfoRarArchiveVolume volume;
private readonly FileInfoRarArchiveVolume volume;
internal FileInfoRarFilePart(FileInfoRarArchiveVolume volume, MarkHeader mh, FileHeader fh, FileInfo fi)
: base(mh, fh)

View File

@@ -1,28 +0,0 @@
using System.IO;
using SharpCompress.Common.Rar;
using SharpCompress.Common.Rar.Headers;
namespace SharpCompress.Archive.Rar
{
internal class SeekableStreamFilePart : RarFilePart
{
internal SeekableStreamFilePart(MarkHeader mh, FileHeader fh, Stream stream)
: base(mh, fh)
{
Stream = stream;
}
internal Stream Stream { get; private set; }
internal override Stream GetCompressedStream()
{
Stream.Position = FileHeader.DataStartPosition;
return Stream;
}
internal override string FilePartName
{
get { return "Unknown Stream - File Entry: " + base.FileHeader.FileName; }
}
}
}

View File

@@ -0,0 +1,27 @@
using System.IO;
using SharpCompress.Common.Rar;
using SharpCompress.Common.Rar.Headers;
namespace SharpCompress.Archive.Rar
{
internal class StreamFilePart : RarFilePart
{
private readonly Stream stream;
internal StreamFilePart(MarkHeader mh, FileHeader fh, Stream stream)
: base(mh, fh)
{
this.stream = stream;
}
internal override Stream GetCompressedStream()
{
stream.Position = FileHeader.DataStartPosition;
return stream;
}
internal override string FilePartName
{
get { return "Unknown Stream - File Entry: " + FileHeader.FileName; }
}
}
}

View File

@@ -14,13 +14,6 @@ namespace SharpCompress.Archive.Rar
{
}
#if !PORTABLE && !NETFX_CORE
public override FileInfo VolumeFile
{
get { return null; }
}
#endif
internal override IEnumerable<RarFilePart> ReadFileParts()
{
return GetVolumeFileParts();
@@ -28,7 +21,7 @@ namespace SharpCompress.Archive.Rar
internal override RarFilePart CreateFilePart(FileHeader fileHeader, MarkHeader markHeader)
{
return new SeekableStreamFilePart(markHeader, fileHeader, Stream);
return new StreamFilePart(markHeader, fileHeader, Stream);
}
}
}

View File

@@ -83,7 +83,11 @@ namespace SharpCompress.Archive.SevenZip
protected override IEnumerable<SevenZipVolume> LoadVolumes(FileInfo file, Options options)
{
return new SevenZipVolume(file, options).AsEnumerable();
if (FlagUtility.HasFlag(options, Options.KeepStreamsOpen))
{
options = (Options)FlagUtility.SetFlag(options, Options.KeepStreamsOpen, false);
}
return new SevenZipVolume(file.OpenRead(), options).AsEnumerable();
}
public static bool IsSevenZipFile(string filePath)

View File

@@ -123,7 +123,11 @@ namespace SharpCompress.Archive.Tar
protected override IEnumerable<TarVolume> LoadVolumes(FileInfo file, Options options)
{
return new TarVolume(file, options).AsEnumerable();
if (FlagUtility.HasFlag(options, Options.KeepStreamsOpen))
{
options = (Options)FlagUtility.SetFlag(options, Options.KeepStreamsOpen, false);
}
return new TarVolume(file.OpenRead(), options).AsEnumerable();
}
#endif

View File

@@ -148,7 +148,11 @@ namespace SharpCompress.Archive.Zip
protected override IEnumerable<ZipVolume> LoadVolumes(FileInfo file, Options options)
{
return new ZipVolume(file, options).AsEnumerable();
if (FlagUtility.HasFlag(options, Options.KeepStreamsOpen))
{
options = (Options)FlagUtility.SetFlag(options, Options.KeepStreamsOpen, false);
}
return new ZipVolume(file.OpenRead(), options).AsEnumerable();
}
#endif

View File

@@ -21,16 +21,6 @@ namespace SharpCompress.Common.GZip
}
#endif
#if !PORTABLE && !NETFX_CORE
/// <summary>
/// File that backs this volume, if it not stream based
/// </summary>
public override FileInfo VolumeFile
{
get { return fileInfo; }
}
#endif
public override bool IsFirstVolume
{
get { return true; }

View File

@@ -1,44 +0,0 @@
using System.IO;
namespace SharpCompress.Common
{
public class GenericVolume : Volume
{
#if !PORTABLE && !NETFX_CORE
private FileInfo fileInfo;
#endif
public GenericVolume(Stream stream, Options options)
: base(stream, options)
{
}
#if !PORTABLE && !NETFX_CORE
public GenericVolume(FileInfo fileInfo, Options options)
: base(fileInfo.OpenRead(), options)
{
this.fileInfo = fileInfo;
}
#endif
#if !PORTABLE && !NETFX_CORE
/// <summary>
/// File that backs this volume, if it not stream based
/// </summary>
public override FileInfo VolumeFile
{
get { return fileInfo; }
}
#endif
public override bool IsFirstVolume
{
get { return true; }
}
public override bool IsMultiVolume
{
get { return true; }
}
}
}

View File

@@ -7,11 +7,5 @@ namespace SharpCompress.Common
{
public interface IVolume : IDisposable
{
#if !PORTABLE && !NETFX_CORE
/// <summary>
/// File that backs this volume, if it not stream based
/// </summary>
FileInfo VolumeFile { get; }
#endif
}
}

View File

@@ -18,7 +18,6 @@ namespace SharpCompress.Common.Rar
internal RarVolume(StreamingMode mode, Stream stream, Options options)
: this(mode, stream, null, options)
{
}
internal RarVolume(StreamingMode mode, Stream stream, string password, Options options)

View File

@@ -2,18 +2,11 @@
namespace SharpCompress.Common.SevenZip
{
public class SevenZipVolume : GenericVolume
public class SevenZipVolume : Volume
{
public SevenZipVolume(Stream stream, Options options)
: base(stream, options)
{
}
#if !PORTABLE && !NETFX_CORE
public SevenZipVolume(FileInfo fileInfo, Options options)
: base(fileInfo, options)
{
}
#endif
}
}

View File

@@ -2,18 +2,11 @@
namespace SharpCompress.Common.Tar
{
public class TarVolume : GenericVolume
public class TarVolume : Volume
{
public TarVolume(Stream stream, Options options)
: base(stream, options)
{
}
#if !PORTABLE && !NETFX_CORE
public TarVolume(FileInfo fileInfo, Options options)
: base(fileInfo, options)
{
}
#endif
}
}

View File

@@ -24,16 +24,18 @@ namespace SharpCompress.Common
/// RarArchive is the first volume of a multi-part archive.
/// Only Rar 3.0 format and higher
/// </summary>
public abstract bool IsFirstVolume { get; }
public virtual bool IsFirstVolume
{
get { return true; }
}
/// <summary>
/// RarArchive is part of a multi-part archive.
/// </summary>
public abstract bool IsMultiVolume { get; }
#if !PORTABLE && !NETFX_CORE
public abstract FileInfo VolumeFile { get; }
#endif
public virtual bool IsMultiVolume
{
get { return true; }
}
private bool disposed;

View File

@@ -2,20 +2,13 @@
namespace SharpCompress.Common.Zip
{
public class ZipVolume : GenericVolume
public class ZipVolume : Volume
{
public ZipVolume(Stream stream, Options options)
: base(stream, options)
{
}
#if !PORTABLE && !NETFX_CORE
public ZipVolume(FileInfo fileInfo, Options options)
: base(fileInfo, options)
{
}
#endif
public string Comment { get; internal set; }
}
}

View File

@@ -18,7 +18,7 @@ namespace SharpCompress.Reader.Rar
internal override string FilePartName
{
get { return "Unknown Stream - File Entry: " + base.FileHeader.FileName; }
get { return "Unknown Stream - File Entry: " + FileHeader.FileName; }
}
}
}

View File

@@ -9,8 +9,6 @@ namespace SharpCompress.Reader.Rar
{
public class RarReaderVolume : RarVolume
{
internal RarReaderVolume(Stream stream, string password, Options options)
: base(StreamingMode.Streaming, stream, password, options)
{
@@ -25,13 +23,5 @@ namespace SharpCompress.Reader.Rar
{
return GetVolumeFileParts();
}
#if !PORTABLE && !NETFX_CORE
public override FileInfo VolumeFile
{
get { return null; }
}
#endif
}
}

View File

@@ -116,7 +116,6 @@
<Compile Include="Common\CompressionInfo.cs" />
<Compile Include="Common\CompressionType.cs" />
<Compile Include="Common\FilePartExtractionBeginEventArgs.cs" />
<Compile Include="Common\GenericVolume.cs" />
<Compile Include="Archive\IArchiveExtractionListener.cs" />
<Compile Include="Common\IncompleteArchiveException.cs" />
<Compile Include="Common\MultiVolumeExtractionException.cs" />
@@ -281,7 +280,7 @@
<Compile Include="Reader\Rar\RarReader.cs" />
<Compile Include="Reader\IReader.Extensions.cs" />
<Compile Include="Reader\Rar\RarReaderEntry.cs" />
<Compile Include="Archive\Rar\SeekableStreamFilePart.cs" />
<Compile Include="Archive\Rar\StreamFilePart.cs" />
<Compile Include="Reader\Rar\SingleVolumeRarReader.cs" />
<Compile Include="Common\ArchiveType.cs" />
<Compile Include="Reader\Tar\TarReader.cs" />