Nic*_*kon 2 c# compression gzip
我想压缩一些非常大的GML文件(1-10GB).我为此编写了一个方法,但它不能很好地工作.如果我使用7-zip for Windows(或其他东西)解压缩它,我得到的文件看起来很糟糕(它还没有完成,XML还没有完成)......我看不到我在做什么错误...
private void CompressFile()
{
string outputPath = Path.Combine(Path.ChangeExtension(_gmlPath, ".gz"));
var buffer = new byte[1024 * 64];
using (var compressing = new GZipStream(File.OpenWrite(outputPath), CompressionMode.Compress))
{
using (var file = File.OpenRead(_gmlPath))
{
var bytesRead = file.Read(buffer, 0, buffer.Length);
while (bytesRead != 0)
{
compressing.Write(buffer, 0, buffer.Length);
bytesRead = file.Read(buffer, 0, buffer.Length);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
[编辑]
其他问题:如何指定/更改文件名,在内部压缩GZ?它的名称与输入的名称相同,但没有.gml扩展名:S(输入中有)...
var bytesRead = file.Read(buffer, 0, buffer.Length);
Run Code Online (Sandbox Code Playgroud)
读取介于1和65536之间,但是
compressing.Write(buffer, 0, buffer.Length);
Run Code Online (Sandbox Code Playgroud)
总是写入65536个字节,所以如果读取的字节少于65536个字节,那么你最终会得到文件中的垃圾.
解决方案:只写入bytesRead许多字节.
compressing.Write(buffer, 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |