GZip解压给出空白文件

| 给定以下代码,为什么解压缩不起作用? \“ NewFile2.txt \”应该具有原始的,已解压缩的文本,但是文件只是空白。
ioTests.CompressFile(@\"c:\\newfile.txt\", @\"c:\\newfile.txt.gz\");
ioTests.DecompressFile(@\"c:\\newfile.txt.gz\", @\"c:\\newfile2.txt\");

public void CompressFile(string inFileName, string outFileName)
{
    FileStream inFile = new FileStream(inFileName, FileMode.Open);
    FileStream outFile = new FileStream(outFileName, FileMode.Create);

    GZipStream compStream = new GZipStream(outFile, CompressionMode.Compress);

    int theByte = inFile.ReadByte();

    while (theByte != -1)
    {
        compStream.WriteByte((byte)theByte);
        theByte = inFile.ReadByte();
    }

    compStream.Close();
}

public void DecompressFile(string inFileName, string outFileName)
{
    FileStream inFile = new FileStream(inFileName, FileMode.Open);
    FileStream outFile = new FileStream(outFileName, FileMode.CreateNew);

    GZipStream compStream = new GZipStream(inFile, CompressionMode.Decompress);

    int theByte = compStream.ReadByte();

    while (theByte != -1)
    {
        outFile.WriteByte((byte)theByte);

        theByte = compStream.ReadByte();
    }

    compStream.Close();
}
    
已邀请:
        
outFile.Flush(); // after your loop
    
        我更喜欢
outFile.Close() 
因为这会刷新流并调用Dispose方法,从而释放分配的资源。     
        由于您使用的流实现了
IDisposable
接口,因此您应在
Dispose()
/
Close()
类中使用类,或使用
using
语句自动执行此操作:
    using (FileStream inFile = new FileStream(inFileName, FileMode.Open))
    using (FileStream outFile = new FileStream(outFileName, FileMode.Create))

    using (GZipStream compStream = new GZipStream(outFile, CompressionMode.Compress)) {

        int theByte = inFile.ReadByte();
        // ... Rest of your code

    }
这大致翻译为:
    try {
       FileStream inFile = new FileStream(inFileName, FileMode.Open);
       FileStream outFile = new FileStream(outFileName, FileMode.Create);
       GZipStream compStream = new GZipStream(outFile, CompressionMode.Compress);

        int theByte = inFile.ReadByte();
        // ... Rest of your code

    } finally {
        if (inFile != null) inFile.Dispose();
        if (outFile != null) outFile.Dispose();
        if (compStream != null) compStream.Dispose();
    }
    

要回复问题请先登录注册