Я пытался скачать архив 7z дважды, и оба раза он не был загружен полностью. Таким образом, у меня есть 2 частично загруженных файла по 2 ГБ, и согласно диаграмме загруженных сегментов в программе менеджера загрузки должна быть возможность объединить их в один законченный файл.
Поэтому мне интересно, каков наилучший способ сделать это?
Заранее спасибо!
-1
1 ответ
0
Я ожидал, что вы дадите мне любое название программы, чтобы решить проблему, и в ожидании ответа я создал такую программу сам. Простой код (C#
):
static void Main(string[] args)
{
int fails = 0;
long failStart = 0;
long failEnd = 0;
const string fileWithHole = @"c:\Downloads\1\eveonline_395875_1of2.7z";
const string fileFilledWhereHole = @"c:\Downloads\eveonline_395875_1of2.7z";
// Copy of the 1st one to repair the hole:
const string targetFile = @"d:\Eve\eveonline_395875_1of2.7z";
using (var br = new BinaryReader(new FileStream(fileWithHole, FileMode.Open)))
{
long pos = 0;
long len = br.BaseStream.Length;
using (var br1 = new BinaryReader(new FileStream(fileFilledWhereHole, FileMode.Open)))
{
using (var w = File.OpenWrite(targetFile))
{
// As I know that hole is in the 1st half of file:
while (pos < len/2)
{
byte b = br.ReadByte();
byte b1 = br1.ReadByte();
// 1 MB to log:
if (pos%1000000 == 0)
{
Console.Clear();
Console.WriteLine("{0} MB", pos/1000000);
Console.WriteLine("FAILS: {0}", fails);
Console.WriteLine("FROM {0} TO {1}", failStart, failEnd);
}
if (b != b1)
{
fails++;
if (failStart == 0)
{
failStart = pos;
w.Seek(pos, SeekOrigin.Begin);
}
failEnd = pos;
// Repair the hole in copied file:
w.WriteByte(b);
}
pos++;
}
}
}
}
}