@@ -136,6 +136,57 @@ public void Zip64Useage()
136136 }
137137 }
138138
139+ /// <summary>
140+ /// Test that entries can be removed from a Zip64 file
141+ /// </summary>
142+ [ Test ]
143+ [ Category ( "Zip" ) ]
144+ public void Zip64Update ( )
145+ {
146+ using ( var memStream = new MemoryStream ( ) )
147+ {
148+ using ( ZipFile f = new ZipFile ( memStream , leaveOpen : true ) )
149+ {
150+ f . UseZip64 = UseZip64 . On ;
151+
152+ var m = new StringMemoryDataSource ( "0000000" ) ;
153+ f . BeginUpdate ( new MemoryArchiveStorage ( ) ) ;
154+ f . Add ( m , "a.dat" ) ;
155+ f . Add ( m , "b.dat" ) ;
156+ f . CommitUpdate ( ) ;
157+ Assert . That ( f . TestArchive ( true ) , Is . True , "initial archive should be valid" ) ;
158+ }
159+
160+ memStream . Seek ( 0 , SeekOrigin . Begin ) ;
161+
162+ using ( ZipFile f = new ZipFile ( memStream , leaveOpen : true ) )
163+ {
164+ Assert . That ( f . Count , Is . EqualTo ( 2 ) , "Archive should have 2 entries" ) ;
165+
166+ f . BeginUpdate ( new MemoryArchiveStorage ( ) ) ;
167+ f . Delete ( "b.dat" ) ;
168+ f . CommitUpdate ( ) ;
169+ Assert . That ( f . TestArchive ( true ) , Is . True , "modified archive should be valid" ) ;
170+ }
171+
172+ memStream . Seek ( 0 , SeekOrigin . Begin ) ;
173+
174+ using ( ZipFile f = new ZipFile ( memStream , leaveOpen : true ) )
175+ {
176+ Assert . That ( f . Count , Is . EqualTo ( 1 ) , "Archive should have 1 entry" ) ;
177+
178+ for ( int index = 0 ; index < f . Count ; ++ index )
179+ {
180+ Stream entryStream = f . GetInputStream ( index ) ;
181+ var data = new MemoryStream ( ) ;
182+ StreamUtils . Copy ( entryStream , data , new byte [ 128 ] ) ;
183+ string contents = Encoding . ASCII . GetString ( data . ToArray ( ) ) ;
184+ Assert . That ( contents , Is . EqualTo ( "0000000" ) , "archive member data should be correct" ) ;
185+ }
186+ }
187+ }
188+ }
189+
139190 [ Test ]
140191 [ Category ( "Zip" ) ]
141192 [ Explicit ]
0 commit comments