C# 如果我将文件打包成部分,GZipStream会损坏文件(Flush不工作)
我试着用这段代码将一个文件压缩成部分C# 如果我将文件打包成部分,GZipStream会损坏文件(Flush不工作),c#,flush,gzipstream,C#,Flush,Gzipstream,我试着用这段代码将一个文件压缩成部分 using (var fsIn = new FileStream("test.avi", FileMode.Open)) { using (var fsOut = new FileStream("test.avi.gz", FileMode.Create)) { var buf = new byte[1024 * 1024]; using (var gzip = new GZipStream(fsOut, C
using (var fsIn = new FileStream("test.avi", FileMode.Open))
{
using (var fsOut = new FileStream("test.avi.gz", FileMode.Create))
{
var buf = new byte[1024 * 1024];
using (var gzip = new GZipStream(fsOut, CompressionMode.Compress, true))
{
while (true)
{
var readCount = fsIn.Read(buf, 0, buf.Length);
if (readCount <= 0)
{
break;
}
gzip.Write(buf, 0, buf.Length);
gzip.Flush();
}
}
}
}
使用(var fsIn=newfilestream(“test.avi”,FileMode.Open))
{
使用(var fsOut=newfilestream(“test.avi.gz”,FileMode.Create))
{
var buf=新字节[1024*1024];
使用(var gzip=new GZipStream(fsOut,CompressionMode.Compress,true))
{
while(true)
{
var readCount=fsIn.Read(buf,0,buf.Length);
如果(readCountnew GZipStream(fsOut,CompressionMode.Compress,true)
在处理后使流保持打开状态,则应将最后一个参数更改为false
leaveOpen
类型:System.Boolean
true
在处理GZipStream
对象后保持流打开;否则,false
在GZipStream中也没有效果
此方法的当前实现不刷新内部
当对象被释放时,内部缓冲区被刷新
你需要知道gzip.Flush();
不起作用
发件人:
此方法的当前实现不刷新内部
当对象被释放时,内部缓冲区被刷新
文件已正确压缩。事实上,该文件包含一组压缩文件。存档编号等于部分编号。在每次新迭代中,都会添加一个新文件并附加到该文件中。
决断
您需要在打包之后和刻录到文件之前指定打包的长度
就这样,
压缩:
BitConverter.GetBytes(compressedPart.Length).CopyTo(blockToWrite, 4);
在解压中读取此长度并选择文件的一部分等于此长度进行解压。如果我写“false”,那么它将不起作用,因为我需要在第二个版本中保留打开的fsOut。默认值为false.Hm。内置的方法摘要告诉我们相反的情况。
BitConverter.GetBytes(compressedPart.Length).CopyTo(blockToWrite, 4);