问题描述
|
给定以下代码,为什么解压缩不起作用? \“ 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,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();
}