【发布时间】:2019-07-18 19:15:30
【问题描述】:
我有一个很大的 .bak 文件 - 接近 12GB。
我需要在代码中将其拆分为多个 2gb .gz 档案。
最大的问题是我需要稍后验证这个档案。
你知道当你在 3 或 4 个档案上用 winrar 拆分一个文件,然后你只需按下“解包”,它会将它们全部解包到一个文件中,或者如果没有足够的档案(你删除一个)崩溃.
我需要这样的东西。
public void Compress(DirectoryInfo directorySelected)
{
int writeStat = 0;
foreach (FileInfo fileToCompress in directorySelected.GetFiles())
{
using (FileStream originalFileStream = fileToCompress.OpenRead())
{
if ((File.GetAttributes(fileToCompress.FullName) &
FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
{
bytesToRead = new byte[originalFileStream.Length];
int numBytesRead = bytesToRead.Length;
while (_nowOffset < originalFileStream.Length)
{
writeStat = originalFileStream.Read(bytesToRead, 0, homMuchRead);
using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + counter + ".gz"))
{
using (GZipStream compressionStream = new GZipStream(compressedFileStream,
CompressionMode.Compress))
{
compressionStream.Write(bytesToRead, 0, writeStat);
}
}
_nowOffset = _nowOffset + writeStat;
counter++;
}
FileInfo info = new FileInfo(directoryPath + Path.DirectorySeparatorChar + fileToCompress.Name + ".gz");
//Console.WriteLine($"Compressed {fileToCompress.Name} from {fileToCompress.Length.ToString()} to {info.Length.ToString()} bytes.");
}
}
}
}
效果很好,但我不知道如何验证它们的计数。
我有 7 个关于测试对象的存档。但是如何在一个文件中读取它们,并验证该文件是否已满。
【问题讨论】:
-
当我到达存档的末尾时它崩溃了 - 什么崩溃了?您是否收到任何类型的异常错误?错误的细节是什么?请在您的问题上单击edit 并添加这些详细信息以供我们帮助。
-
修复代码删除 - homMuchRead += 10000;偏移量加上计数大于目标数组的长度时崩溃。
-
我无法理解如何在压缩后验证这个档案,我有 7 个测试档案,但是如何验证它们的数量并阅读它们?
-
如何读回大块请check this link
-
为什么不使用 7-zip?它有一个可以从 C# 调用的命令行界面。