Как упаковать большой файл в .tar?C#

Место общения программистов C#
Anonymous
Как упаковать большой файл в .tar?

Сообщение Anonymous »

Как упаковать большой файл в Tar?
Если вы используете этот код, то используется много оперативной памяти.

Код: Выделить всё

byte[] buffer = ArrayPool.Shared.Rent(1024 * 1024);
string item = @"R:\Bigfile.dat";
using (FileStream _writestream = File.Create(@"R:\test.tar")
using (TarWriter tarwriter = new(_writestream, TarEntryFormat.Pax, leaveOpen: false))
using (FileStream srcFile = new(item, FileMode.Open, FileAccess.Read))
{
string fileName = item.Remove(0, mainDir.Length + 1).Replace('\\', '/');
PaxTarEntry te = new(TarEntryType.RegularFile, fileName)
{
DataStream = new MemoryStream()
};

int currentBlockSize = 0;
while ((currentBlockSize = srcFile.Read(buffer)) > 0)
{
te.DataStream.Write(buffer.AsSpan(0, currentBlockSize));
}
te.DataStream.Position = 0;
tarwriter.WriteEntry(te);
}
ArrayPool.Shared.Return(buffer);
Если вы используете этот код, он будет использовать много памяти. Да, возможно, потому что это будет записано в MemoryStream(). Но какие варианты лучше, если нужно написать ОЧЕНЬ большой файл? Я хочу записывать в файл .tar вместо оперативной памяти и хочу контролировать размер каждой итерации цикла записи с помощью размера буфера.

Подробнее здесь: https://stackoverflow.com/questions/787 ... into-a-tar

Вернуться в «C#»