コード例 #1
0
ファイル: UnzipTask.cs プロジェクト: zoroz/flubu.core
        protected override int DoExecute(ITaskContextInternal context)
        {
            OSPlatform os = context.Properties.GetOSPlatform();

            DoLogInfo($"Extract {_fileName} to {_destination}");

            if (!Directory.Exists(_destination))
            {
                Directory.CreateDirectory(_destination);
            }

            using (Stream zip = File.OpenRead(_fileName))
                using (ZipArchive archive = new ZipArchive(zip, ZipArchiveMode.Read))
                {
                    ZipArchiveEntry metaEntry = archive.Entries.FirstOrDefault(i => i.FullName == Zipper.MetadataFileName);
                    ZipMetadata     metadata  = null;

                    if (metaEntry != null)
                    {
                        using (Stream ms = metaEntry.Open())
                            using (var sr = new StreamReader(ms))
                            {
                                var serializer = new JsonSerializer();
                                metadata = serializer.Deserialize <ZipMetadata>(new JsonTextReader(sr));
                            }
                    }

                    foreach (ZipArchiveEntry entry in archive.Entries)
                    {
                        string zipFile = entry.FullName;

                        if (zipFile.EndsWith("/"))
                        {
                            continue;
                        }

                        if (metadata == null)
                        {
                            ExtractToFiles(context, entry, os, new List <string> {
                                zipFile
                            });
                            continue;
                        }

                        ZipMetadataItem metaItem = metadata.Items.FirstOrDefault(i => i.FileName == zipFile);

                        if (metaItem == null)
                        {
                            DoLogInfo($"{zipFile} not found in metadata!");
                            continue;
                        }

                        ExtractToFiles(context, entry, os, metaItem.DestinationFiles);
                    }
                }

            return(0);
        }
コード例 #2
0
            /// <summary>
            /// Get Zip Metadata using stream
            /// Feature is supported in version 18.5 or greater of the API
            /// </summary>
            public static void GetZipMatadataUsingStream()
            {
                try
                {
                    using (Stream stream = File.Open(Common.MapSourceFilePath(filePath), FileMode.Open, FileAccess.ReadWrite))
                    {
                        using (ZipFormat format = new ZipFormat(stream))
                        {
                            // get info
                            ZipMetadata info = format.ZipInfo;

                            // get total entries
                            Console.WriteLine("Total Entries : {0}, ", info.TotalEntries);

                            //get comments
                            Console.WriteLine("Comments : {0}, ", info.Comment);
                            foreach (var fileInfo in info.Files)
                            {
                                // get file name
                                Console.WriteLine("File Name : {0}, ", fileInfo.Name);

                                // get compressed size
                                Console.WriteLine("CompressedSize : {0}, ", fileInfo.CompressedSize);

                                // get uncompressed size
                                Console.WriteLine("UncompressedSize : {0}, ", fileInfo.UncompressedSize);

                                // get compression method
                                Console.WriteLine("CompressionMethod : {0}, ", fileInfo.CompressionMethod);
                            }
                        }
                        // The stream is still open here
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
コード例 #3
0
            /// <summary>
            /// Gets info of Zip file
            /// </summary>
            ///
            public static void GetZipMatadata()
            {
                try
                {
                    //ExStart:GetZipMatadata
                    // initialize
                    using (ZipFormat zipFormat = new ZipFormat(Common.MapSourceFilePath(filePath)))
                    {
                        // get info
                        ZipMetadata info = zipFormat.ZipInfo;

                        // get total entries
                        Console.WriteLine("Total Entries : {0}, ", info.TotalEntries);

                        //get comments
                        Console.WriteLine("Comments : {0}, ", info.Comment);
                        foreach (var fileInfo in info.Files)
                        {
                            // get file name
                            Console.WriteLine("File Name : {0}, ", fileInfo.Name);

                            // get compressed size
                            Console.WriteLine("CompressedSize : {0}, ", fileInfo.CompressedSize);

                            // get uncompressed size
                            Console.WriteLine("UncompressedSize : {0}, ", fileInfo.UncompressedSize);

                            // get compression method
                            Console.WriteLine("CompressionMethod : {0}, ", fileInfo.CompressionMethod);
                        }
                    }
                    //ExEnd:GetZipMatadata
                }
                catch (Exception exp)
                {
                    Console.WriteLine(exp.Message);
                }
            }