mirror of
https://github.com/Stone-Red-Code/HyperbolicDownloader.git
synced 2026-09-04 17:16:10 +02:00
33 lines
1.3 KiB
C#
33 lines
1.3 KiB
C#
using System.IO.Compression;
|
|
|
|
namespace HyperbolicDownloaderApi.FileProcessing;
|
|
|
|
internal static class FileCompressor
|
|
{
|
|
public static void CompressFile(string inputFilePath, string compressedFilePath)
|
|
{
|
|
using FileStream originalFileStream = File.Open(inputFilePath, FileMode.Open);
|
|
using FileStream compressedFileStream = File.Create(compressedFilePath);
|
|
using GZipStream? compressor = new GZipStream(compressedFileStream, CompressionMode.Compress);
|
|
originalFileStream.CopyTo(compressor);
|
|
}
|
|
|
|
public static void DecompressFile(string compressedFilePath, string outputFilePath)
|
|
{
|
|
using FileStream compressedFileStream = File.Open(compressedFilePath, FileMode.Open);
|
|
using FileStream outputFileStream = File.Create(outputFilePath);
|
|
using GZipStream? decompressor = new GZipStream(compressedFileStream, CompressionMode.Decompress);
|
|
decompressor.CopyTo(outputFileStream);
|
|
}
|
|
|
|
public static IEnumerable<byte[]> ReadChunks(string path, int chunkSize)
|
|
{
|
|
byte[] buffer = new byte[chunkSize];
|
|
using FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);
|
|
using BufferedStream bs = new BufferedStream(fs);
|
|
while (bs.Read(buffer, 0, chunkSize) != 0)
|
|
{
|
|
yield return buffer;
|
|
}
|
|
}
|
|
} |