예제 #1
0
        /// <summary>
        /// 解凍する。
        /// </summary>
        /// <returns>展開に成功した。</returns>
        public override bool Expand()
        {
            try
            {
                Trace.WriteLine($"{LogHelper.Stamp}Expand  : {this.InputFile.FullName} -> {LocationMaster.ExpandedDirectory.FullName}");
                if (string.IsNullOrWhiteSpace(this.InputFile.FullName))
                {
                    return(false);
                }

                SevenZManager.fnExtract(this.InputFile.FullName, LocationMaster.ExpandedDirectory.FullName);

                // ディレクトリーを浅くします。
                PathFlat.GoFlat(LocationMaster.ExpandedDirectory.FullName);

                // 解凍が終わった元ファイルは削除。
                this.InputFile.Delete();
                return(true);
            }
            catch (BadImageFormatException e)
            {
                // 32ビットのプログラムを 64ビットで動かそうとしたときなど。
                Trace.WriteLine(e);
                return(false);
            }
            catch (InvalidOperationException e)
            {
                Trace.WriteLine(e);
                return(false);
            }
        }
예제 #2
0
 protected virtual void ExtractFile(string temppath, string file, string ext)
 {
     ReCreateDir(temppath);
     if (ext == ".7z" || ext == ".7zip")
     {
         SevenZManager.fnExtract(file, temppath);
     }
     else
     {
         using (Stream stream = File.OpenRead(file))
         {
             //未実装:ファイル名にハイフンが入っていたらリネーム
             var reader = ReaderFactory.Open(stream);
             while (reader.MoveToNextEntry())
             {
                 if (!reader.Entry.IsDirectory)
                 {
                     reader.WriteEntryToDirectory(temppath
                                                  , ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);
                 }
             }
         }
     }
 }