49 lines
1.3 KiB
C#
49 lines
1.3 KiB
C#
using System.IO;
|
|
|
|
namespace AssetStudio
|
|
{
|
|
public static class StreamExtensions
|
|
{
|
|
private const int BufferSize = 81920;
|
|
|
|
public static void CopyTo(this Stream source, Stream destination, long size)
|
|
{
|
|
var buffer = new byte[BufferSize];
|
|
for (var left = size; left > 0; left -= BufferSize)
|
|
{
|
|
int toRead = BufferSize < left ? BufferSize : (int)left;
|
|
int read = source.Read(buffer, 0, toRead);
|
|
destination.Write(buffer, 0, read);
|
|
if (read != toRead)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void AlignStream(this Stream stream)
|
|
{
|
|
stream.AlignStream(4);
|
|
}
|
|
|
|
public static void AlignStream(this Stream stream, int alignment)
|
|
{
|
|
var pos = stream.Position;
|
|
var mod = pos % alignment;
|
|
if (mod != 0)
|
|
{
|
|
var rem = alignment - mod;
|
|
for (int _ = 0; _ < rem; _++)
|
|
{
|
|
if (!stream.CanWrite)
|
|
{
|
|
throw new IOException("End of stream");
|
|
}
|
|
|
|
stream.WriteByte(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|