zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C# 文件流压缩解压

c#文件 压缩 解压
2023-09-14 09:02:10 时间
byte[] array = ZipHelper.StreamToBytes(stream); byte[] array2 = new byte[array.Length]; Deflater deflater = new Deflater(); deflater.SetLevel(level); deflater.SetStrategy(DeflateStrategy.Default); deflater.SetInput(array); deflater.Finish(); int num = deflater.Deflate(array2); byte[] array3 = new byte[num]; Array.Copy(array2, array3, num); return ZipHelper.BytesToStream(array3); /// summary /// Deflate方式压缩 /// /summary /// param name="input" /param /// param name="level" 压缩品质级别(0~9) /param /// returns /returns public static byte[] Deflate(byte[] input, int level) byte[] result; if (input == null input.Length == 0) result = new byte[0]; else byte[] array = new byte[input.Length]; Deflater deflater = new Deflater(); deflater.SetLevel(level); deflater.SetStrategy(DeflateStrategy.Default); deflater.SetInput(input); deflater.Finish(); int num = deflater.Deflate(array); byte[] array2 = new byte[num]; Array.Copy(array, array2, num); result = array2; catch (Exception innerException) throw new Exception("压缩程序出错!", innerException); return result; #endregion #region Inflate解压 /// summary /// Inflate解压 /// /summary /// param name="input" /param /// returns /returns public static byte[] Inflate(byte[] input) byte[] result; if (input == null input.Length == 0) result = new byte[0]; else Inflater inflater = new Inflater(); inflater.SetInput(input); byte[] array = new byte[1024]; using (MemoryStream memoryStream = new MemoryStream()) for (int i = inflater.Inflate(array, 0, array.Length); i i = inflater.Inflate(array, 0, array.Length)) memoryStream.Write(array, 0, i); byte[] buffer = memoryStream.GetBuffer(); memoryStream.Close(); result = buffer; catch (Exception innerException) throw new Exception("解压缩程序出错!", innerException); return result; /// summary /// Inflate解压 /// /summary /// param name="zipStream" /param /// returns /returns public static Stream Inflate(Stream zipStream) byte[] input = ZipHelper.StreamToBytes(zipStream); byte[] bytes = ZipHelper.Inflate(input); return ZipHelper.BytesToStream(bytes); #endregion #endregion #region GZip压缩 /// summary /// GZip压缩 /// /summary /// param name="srcStream" /param /// param name="output" /param public static void GZipCompress(Stream srcStream, Stream output) ZipHelper.GZipCompress(srcStream, 6, output); /// summary /// GZip压缩 /// /summary /// param name="srcStream" /param /// param name="compressLevel" 压缩品质级别(0~9) /param /// param name="output" /param public static void GZipCompress(Stream srcStream, int compressLevel, Stream output) if (compressLevel 1 || compressLevel 9) throw new Exception(string.Format("您指定的压缩级别 {0} 不在有效的范围(1-9)内", compressLevel)); srcStream.Position = 0L; GZipOutputStream gZipOutputStream = new GZipOutputStream(output); gZipOutputStream.SetLevel(compressLevel); int i = 4096; byte[] buffer = new byte[i]; while (i 0) i = srcStream.Read(buffer, 0, i); gZipOutputStream.Write(buffer, 0, i); catch (Exception ex) throw new Exception("GZip压缩出错:" + ex.Message); srcStream.Close(); gZipOutputStream.Finish(); /// summary /// GZip解压 /// /summary /// param name="zipStream" /param /// param name="outputStream" /param public static void GZipDeCompress(Stream zipStream, Stream outputStream) GZipInputStream gZipInputStream = new GZipInputStream(zipStream); int i = 4096; byte[] buffer = new byte[i]; while (i 0) i = gZipInputStream.Read(buffer, 0, i); outputStream.Write(buffer, 0, i); catch (Exception ex) throw new Exception("GZip解压缩出错:" + ex.Message); zipStream.Close(); gZipInputStream.Close(); #endregion #region BZip2压缩 /// summary /// BZip2压缩 /// /summary /// param name="inStream" /param /// param name="outStream" /param /// param name="blockSize" /param public static void BZip2Compress(Stream inStream, Stream outStream, int blockSize) BZip2.Compress(inStream, outStream, blockSize); /// summary /// BZip2解压 /// /summary /// param name="inStream" /param /// param name="outStream" /param public static void BZip2Decompress(Stream inStream, Stream outStream) BZip2.Decompress(inStream, outStream); #endregion
stream.Seek(0L, SeekOrigin.Begin); FileStream fileStream = new FileStream(fileName, FileMode.Create); BinaryWriter binaryWriter = new BinaryWriter(fileStream); binaryWriter.Write(array); binaryWriter.Close(); fileStream.Close(); private static Stream FileToStream(string fileName) FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] array = new byte[fileStream.Length]; fileStream.Read(array, 0, array.Length); fileStream.Close(); return new MemoryStream(array); }
C++文件读写操作分析文本文件与二进制文件 文本文件 写文件步骤如下: 1. 包含头文件 #include fstream 2. 创建流对象 ofstream ofs; 3. 打开文件 ofs.open( 文件路径 ,打开方式); 4. 写数据 ofs 写入的数据 5. 关闭文件 ofs.close(); 文件打开方式: ios::in 为读文件而打开文件 ios::out 为写文件而打开文件 ios::ate 初始位置:文件尾 ios::app 追加方式写文件 ios::trunc 如果文件存在先删除,再创建 ios::binary 二进制方式
文件处理 文件操作三步: 打开文件 open() 读取/写入 read()/write() 默认打开文件是只读模式。如: file=open( /etc/hosts ) data=file.read() file.