1+ using ICSharpCode . SharpZipLib . Core ;
2+ using ICSharpCode . SharpZipLib . GZip ;
3+ using ICSharpCode . SharpZipLib . Tar ;
4+ using System ;
5+ using System . IO ;
6+ using System . IO . Compression ;
7+ using System . Linq ;
8+ using System . Threading ;
9+ using System . Threading . Tasks ;
10+
11+ namespace Common
12+ {
13+ public class Compress
14+ {
15+ public static void ExtractGZip ( string gzipFileName , string targetDir )
16+ {
17+ // Use a 4K buffer. Any larger is a waste.
18+ byte [ ] dataBuffer = new byte [ 4096 ] ;
19+
20+ using ( System . IO . Stream fs = new FileStream ( gzipFileName , FileMode . Open , FileAccess . Read ) )
21+ {
22+ using ( GZipInputStream gzipStream = new GZipInputStream ( fs ) )
23+ {
24+ // Change this to your needs
25+ string fnOut = Path . Combine ( targetDir , Path . GetFileNameWithoutExtension ( gzipFileName ) ) ;
26+
27+ using ( FileStream fsOut = File . Create ( fnOut ) )
28+ {
29+ StreamUtils . Copy ( gzipStream , fsOut , dataBuffer ) ;
30+ }
31+ }
32+ }
33+ }
34+
35+ public static void UnZip ( String gzArchiveName , String destFolder )
36+ {
37+ var flag = gzArchiveName . Split ( Path . DirectorySeparatorChar ) . Last ( ) . Split ( '.' ) . First ( ) + ".bin" ;
38+ if ( File . Exists ( Path . Combine ( destFolder , flag ) ) ) return ;
39+
40+ Console . WriteLine ( $ "Extracting.") ;
41+ var task = Task . Run ( ( ) =>
42+ {
43+ ZipFile . ExtractToDirectory ( gzArchiveName , destFolder ) ;
44+ } ) ;
45+
46+ while ( ! task . IsCompleted )
47+ {
48+ Thread . Sleep ( 200 ) ;
49+ Console . Write ( "." ) ;
50+ }
51+
52+ File . Create ( Path . Combine ( destFolder , flag ) ) ;
53+ Console . WriteLine ( "" ) ;
54+ Console . WriteLine ( "Extracting is completed." ) ;
55+ }
56+
57+ public static void ExtractTGZ ( String gzArchiveName , String destFolder )
58+ {
59+ var flag = gzArchiveName . Split ( Path . DirectorySeparatorChar ) . Last ( ) . Split ( '.' ) . First ( ) + ".bin" ;
60+ if ( File . Exists ( Path . Combine ( destFolder , flag ) ) ) return ;
61+
62+ Console . WriteLine ( $ "Extracting.") ;
63+ var task = Task . Run ( ( ) =>
64+ {
65+ using ( var inStream = File . OpenRead ( gzArchiveName ) )
66+ {
67+ using ( var gzipStream = new GZipInputStream ( inStream ) )
68+ {
69+ using ( TarArchive tarArchive = TarArchive . CreateInputTarArchive ( gzipStream ) )
70+ tarArchive . ExtractContents ( destFolder ) ;
71+ }
72+ }
73+ } ) ;
74+
75+ while ( ! task . IsCompleted )
76+ {
77+ Thread . Sleep ( 200 ) ;
78+ Console . Write ( "." ) ;
79+ }
80+
81+ File . Create ( Path . Combine ( destFolder , flag ) ) ;
82+ Console . WriteLine ( "" ) ;
83+ Console . WriteLine ( "Extracting is completed." ) ;
84+ }
85+ }
86+ }
0 commit comments