コード例 #1
0
        public void ExtractJpg(string file, string outputPath, PageMode mode, int pageCount, ReadFileEncodingType encodingMode)
        {
            Info(string.Format("ZIP解凍開始 file={0},outputPath={1}, mode={2}, pageCount={3}, encodingMode={4}", file, outputPath, mode, pageCount, encodingMode));
            //モードに応じたエンコーディング
            var encList = GetEncodingByMode(encodingMode);

            foreach (var enc in encList)
            {
                Info(string.Format("enc={0}", enc));
                var option = new ReadOptions();
                option.Encoding = enc;
                //読み込み
                using (var zip = ZipFile.Read(file, option))
                {
                    var entries = zip.Entries.Where(x => ImageUtil.IsImageFile(x.FileName));
                    //var entries = zip.Where(x => x.FileName.ToLower().EndsWith(".jpg") || x.FileName.ToLower().EndsWith(".jpeg"));
                    //画像ファイル数=ページ数と換算する
                    var count = entries.Count();
                    if (count > 0)
                    {
                        //開始終了ページの取得
                        var targetPair = PageUtil.GetPagePair(mode, count, pageCount);
                        //取得したページから画像取り出す
                        foreach (var pair in targetPair.Select((x, i) => new { x = x, i = i }))
                        {
                            //対象のファイルを解凍する
                            foreach (var img in entries.Skip(pair.x.StartPage - 1).Take((pair.x.EndPage - (pair.x.StartPage - 1))))
                            {
                                img.Extract(outputPath, ExtractExistingFileAction.OverwriteSilently);
                            }
                        }
                        //一度読み込めれば次のエンコードは実施しない
                        break;
                    }
                    else
                    {
                        Error(string.Format("圧縮ファイル内数が0以下 {0}", count));
                    }
                }
            }
        }