コード例 #1
0
ファイル: UnzipReadStream.cs プロジェクト: ItsVeryWindy/mono
		public UnzipReadStream (UnzipArchive archive, CompressionOption compressionLevel)
		{
			Archive = archive;
			Archive.FileActive = true;
			CompressionLevel = compressionLevel;
			length = NativeVersion.Use32Bit ? NativeUnzip.CurrentFileLength32 (Archive.Handle) : NativeUnzip.CurrentFileLength64 (Archive.Handle);
		}
コード例 #2
0
ファイル: UnzipReadStream.cs プロジェクト: pmq20/mono_forked
 public UnzipReadStream(UnzipArchive archive, CompressionOption compressionLevel)
 {
     Archive            = archive;
     Archive.FileActive = true;
     CompressionLevel   = compressionLevel;
     length             = NativeUnzip.CurrentFileLength(Archive.Handle);
 }
コード例 #3
0
ファイル: ZipPackagePart.cs プロジェクト: nobled/mono
		protected override Stream GetStreamCore (FileMode mode, FileAccess access)
		{
			ZipPartStream zps;
			MemoryStream stream;
			if (Package.PartStreams.TryGetValue (Uri, out stream)) {
				zps = new ZipPartStream (Package, stream, access);
				if (mode == FileMode.Create)
					stream.SetLength (0);
				return new ZipPartStream (Package, stream, access);
			}
			
			stream = new MemoryStream ();
			try
			{
				using (UnzipArchive archive = new UnzipArchive (Package.PackageStream)) {
					foreach (string file in archive.GetFiles ()) {
						if (file != Uri.ToString ().Substring (1))
							continue;
						
						using (Stream archiveStream = archive.GetStream (file)) {
							int read = 0;
							byte[] buffer = new byte [Math.Min (archiveStream.Length, 2 * 1024)];
							while ((read = archiveStream.Read (buffer, 0, buffer.Length)) != 0)
								stream.Write (buffer, 0, read);
						}
					}
				}
			}
			catch
			{
				// The zipfile is invalid, so just create the file
				// as if it didn't exist
				stream.SetLength (0);
			}

			Package.PartStreams.Add (Uri, stream);
			if (mode == FileMode.Create)
				stream.SetLength (0);
			return new ZipPartStream (Package, stream, access);
		}