Пример #1
0
        /// <summary>
        /// From a passed in archive (zip, rar, 7z, 001), return all parts.
        /// </summary>
        /// <param name="part1"></param>
        /// <returns></returns>
        public static IEnumerable <FileInfo> GetFileParts(FileInfo part1)
        {
            part1.CheckNotNull(nameof(part1));
            yield return(part1);

            int i = 1;

            FileInfo part = RarArchiveVolumeFactory.GetFilePart(i++, part1);

            if (part != null)
            {
                yield return(part);

                while ((part = RarArchiveVolumeFactory.GetFilePart(i++, part1)) != null) //tests split too
                {
                    yield return(part);
                }
            }
            else
            {
                i = 1;
                while ((part = ZipArchiveVolumeFactory.GetFilePart(i++, part1)) != null) //tests split too
                {
                    yield return(part);
                }
            }
        }
Пример #2
0
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="options"></param>
 public static IArchive Open(FileInfo fileInfo, ReaderOptions options = null)
 {
     fileInfo.CheckNotNull(nameof(fileInfo));
     options = options ?? new ReaderOptions {
         LeaveStreamOpen = false
     };
     using (var stream = fileInfo.OpenRead())
     {
         if (ZipArchive.IsZipFile(stream, null))
         {
             return(ZipArchive.Open(fileInfo, options));
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (SevenZipArchive.IsSevenZipFile(stream))
         {
             return(SevenZipArchive.Open(fileInfo, options));
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (GZipArchive.IsGZipFile(stream))
         {
             return(GZipArchive.Open(fileInfo, options));
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (RarArchive.IsRarFile(stream, options))
         {
             return(RarArchive.Open(fileInfo, options));
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (TarArchive.IsTarFile(stream))
         {
             return(TarArchive.Open(fileInfo, options));
         }
         throw new InvalidOperationException("Cannot determine compressed stream type. Supported Archive Formats: Zip, GZip, Tar, Rar, 7Zip");
     }
 }
Пример #3
0
        /// <summary>
        /// Constructor with IEnumerable FileInfo objects, multi and split support.
        /// </summary>
        /// <param name="fileInfos"></param>
        /// <param name="options"></param>
        public static IArchive Open(IEnumerable <FileInfo> fileInfos, ReaderOptions options = null)
        {
            fileInfos.CheckNotNull(nameof(fileInfos));
            FileInfo[] files = fileInfos.ToArray();
            if (files.Length == 0)
            {
                throw new InvalidOperationException("No files to open");
            }
            FileInfo fileInfo = files[0];

            if (files.Length == 1)
            {
                return(Open(fileInfo, options));
            }


            fileInfo.CheckNotNull(nameof(fileInfo));
            if (options == null)
            {
                options = new ReaderOptions {
                    LeaveStreamOpen = false
                }
            }
            ;

            ArchiveType?type;

            using (Stream stream = fileInfo.OpenRead())
                IsArchive(stream, out type); //test and reset stream position

            if (type != null)
            {
                switch (type.Value)
                {
                case ArchiveType.Zip:
                    return(ZipArchive.Open(files, options));

                case ArchiveType.SevenZip:
                    return(SevenZipArchive.Open(files, options));

                case ArchiveType.GZip:
                    return(GZipArchive.Open(files, options));

                case ArchiveType.Rar:
                    return(RarArchive.Open(files, options));

                case ArchiveType.Tar:
                    return(TarArchive.Open(files, options));
                }
            }
            throw new InvalidOperationException("Cannot determine compressed stream type. Supported Archive Formats: Zip, GZip, Tar, Rar, 7Zip");
        }
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="options"></param>
 public static IArchive Open(FileInfo fileInfo, Options options)
 {
     fileInfo.CheckNotNull("fileInfo");
     using (var stream = fileInfo.OpenRead())
     {
         if (ZipArchive.IsZipFile(stream))
         {
             return(ZipArchive.Open(fileInfo, options));
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (RarArchive.IsRarFile(stream))
         {
             return(RarArchive.Open(fileInfo, options));
         }
         throw new InvalidOperationException("Cannot determine compressed stream type.");
     }
 }
Пример #5
0
        /// <summary>
        /// Constructor with a FileInfo object to an existing file.
        /// </summary>
        /// <param name="fileInfo"></param>
        /// <param name="options"></param>
        public static IArchive Open(FileInfo fileInfo, Options options)
        {
            fileInfo.CheckNotNull("fileInfo");
            using (var stream = fileInfo.OpenRead())
            {
                if (ZipArchive.IsZipFile(stream, null))
                {
                    stream.Dispose();
                    return(ZipArchive.Open(fileInfo, options, null));
                }
#if RAR
                stream.Seek(0, SeekOrigin.Begin);
                if (RarArchive.IsRarFile(stream, Options.LookForHeader | Options.KeepStreamsOpen))
                {
                    stream.Dispose();
                    return(RarArchive.Open(fileInfo, options));
                }
#endif
#if TAR
                stream.Seek(0, SeekOrigin.Begin);
                if (TarArchive.IsTarFile(stream))
                {
                    stream.Dispose();
                    return(TarArchive.Open(fileInfo, options));
                }
#endif
#if SEVENZIP
                stream.Seek(0, SeekOrigin.Begin);
                if (SevenZipArchive.IsSevenZipFile(stream))
                {
                    stream.Dispose();
                    return(SevenZipArchive.Open(fileInfo, options));
                }
#endif
#if GZIP
                stream.Seek(0, SeekOrigin.Begin);
                if (GZipArchive.IsGZipFile(stream))
                {
                    stream.Dispose();
                    return(GZipArchive.Open(fileInfo, options));
                }
#endif
                throw new InvalidOperationException("Cannot determine compressed stream type.");
            }
        }
Пример #6
0
        /// <summary>
        /// Constructor with a FileInfo object to an existing file.
        /// </summary>
        /// <param name="fileInfo"></param>
        /// <param name="options"></param>
        public static IArchive Open(FileInfo fileInfo, ReaderOptions options = null)
        {
            fileInfo.CheckNotNull(nameof(fileInfo));
            if (options == null)
            {
                options = new ReaderOptions {
                    LeaveStreamOpen = false
                }
            }
            ;

            ArchiveType?type;

            using (Stream stream = fileInfo.OpenRead())
            {
                IsArchive(stream, out type); //test and reset stream position

                if (type != null)
                {
                    switch (type.Value)
                    {
                    case ArchiveType.Zip:
                        return(ZipArchive.Open(fileInfo, options));

                    case ArchiveType.SevenZip:
                        return(SevenZipArchive.Open(fileInfo, options));

                    case ArchiveType.GZip:
                        return(GZipArchive.Open(fileInfo, options));

                    case ArchiveType.Rar:
                        return(RarArchive.Open(fileInfo, options));

                    case ArchiveType.Tar:
                        return(TarArchive.Open(fileInfo, options));
                    }
                }
            }
            throw new InvalidOperationException("Cannot determine compressed stream type. Supported Archive Formats: Zip, GZip, Tar, Rar, 7Zip");
        }
 public static bool TryOpen(FileInfo fileInfo, ReaderOptions options, ArchiveTypeMask archiveTypes, out IArchive archive)
 {
     fileInfo.CheckNotNull("fileInfo");
     options = options ?? new ReaderOptions {
         LeaveStreamOpen = false
     };
     using (var stream = fileInfo.OpenRead())
     {
         if (archiveTypes.HasFlag(ArchiveTypeMask.Zip) && ZipArchive.IsZipFile(stream, null))
         {
             archive = ZipArchive.Open(fileInfo, options);
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (archiveTypes.HasFlag(ArchiveTypeMask.SevenZip) && SevenZipArchive.IsSevenZipFile(stream))
         {
             archive = SevenZipArchive.Open(fileInfo, options);
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (archiveTypes.HasFlag(ArchiveTypeMask.GZip) && GZipArchive.IsGZipFile(stream))
         {
             archive = GZipArchive.Open(fileInfo, options);
             return(true);
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (archiveTypes.HasFlag(ArchiveTypeMask.Rar) && RarArchive.IsRarFile(stream, options))
         {
             archive = RarArchive.Open(fileInfo, options);
             return(true);
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (archiveTypes.HasFlag(ArchiveTypeMask.Tar) && TarArchive.IsTarFile(stream))
         {
             archive = TarArchive.Open(fileInfo, options);
             return(true);
         }
     }
     archive = null;
     return(false);
 }
Пример #8
0
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="options"></param>
 public static IArchive Open(FileInfo fileInfo, Options options)
 {
     fileInfo.CheckNotNull("fileInfo");
     using (var stream = fileInfo.OpenRead())
     {
         if (ZipArchive.IsZipFile(stream, null))
         {
             stream.Dispose();
             return(ZipArchive.Open(fileInfo, options, null));
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (SevenZipArchive.IsSevenZipFile(stream))
         {
             stream.Dispose();
             return(SevenZipArchive.Open(fileInfo, options));
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (GZipArchive.IsGZipFile(stream))
         {
             stream.Dispose();
             return(GZipArchive.Open(fileInfo, options));
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (RarArchive.IsRarFile(stream, options))
         {
             stream.Dispose();
             return(RarArchive.Open(fileInfo, options));
         }
         stream.Seek(0, SeekOrigin.Begin);
         if (TarArchive.IsTarFile(stream))
         {
             stream.Dispose();
             return(TarArchive.Open(fileInfo, options));
         }
         throw new InvalidOperationException("Cannot determine compressed stream type. Supported Archive Formats: Zip, GZip, Tar, Rar, 7Zip");
     }
 }
Пример #9
0
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="options"></param>
 /// <param name="password"></param>
 public static ZipArchive Open(FileInfo fileInfo, Options options, string password = null)
 {
     fileInfo.CheckNotNull("fileInfo");
     return(new ZipArchive(fileInfo, options, password));
 }
Пример #10
0
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="readerOptions"></param>
 public static GZipArchive Open(FileInfo fileInfo, ReaderOptions?readerOptions = null)
 {
     fileInfo.CheckNotNull(nameof(fileInfo));
     return(new GZipArchive(fileInfo, readerOptions ?? new ReaderOptions()));
 }
Пример #11
0
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="options"></param>
 public static SevenZipArchive Open(FileInfo fileInfo, Options options)
 {
     fileInfo.CheckNotNull("fileInfo");
     return(new SevenZipArchive(fileInfo, options));
 }
Пример #12
0
 public static SevenZipArchive Open(FileInfo fileInfo, ReaderOptions readerOptions = null)
 {
     fileInfo.CheckNotNull("fileInfo");
     return(new SevenZipArchive(new SourceStream(fileInfo, i => ArchiveVolumeFactory.GetFilePart(i, fileInfo), readerOptions ?? new ReaderOptions())));
 }
Пример #13
0
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="options"></param>
 public static RarArchive Open(FileInfo fileInfo, RarOptions options)
 {
     fileInfo.CheckNotNull("fileInfo");
     return(new RarArchive(fileInfo, options));
 }
Пример #14
0
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="options"></param>
 public static RarArchive Open(FileInfo fileInfo, ReaderOptions?options = null)
 {
     fileInfo.CheckNotNull(nameof(fileInfo));
     return(new RarArchive(new SourceStream(fileInfo, i => RarArchiveVolumeFactory.GetFilePart(i, fileInfo), options ?? new ReaderOptions())));
 }
Пример #15
0
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="options"></param>
 public static RarArchive Open(FileInfo fileInfo, ReaderOptions options = null)
 {
     fileInfo.CheckNotNull(nameof(fileInfo));
     return new RarArchive(fileInfo, options ?? new ReaderOptions());
 }
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="readerOptions"></param>
 public static TarArchive Open(FileInfo fileInfo, ReaderOptions readerOptions = null)
 {
     fileInfo.CheckNotNull("fileInfo");
     return(new TarArchive(fileInfo, readerOptions ?? new ReaderOptions()));
 }
Пример #17
0
 /// <summary>
 /// Constructor with a FileInfo object to an existing file.
 /// </summary>
 /// <param name="fileInfo"></param>
 /// <param name="readerOptions"></param>
 public static TarArchive Open(FileInfo fileInfo, ReaderOptions readerOptions = null)
 {
     fileInfo.CheckNotNull(nameof(fileInfo));
     return(new TarArchive(fileInfo, readerOptions != null ?readerOptions: new ReaderOptions()));
 }