force-net / Crc32.NET

Fast version of Crc32 algorithm for .NET
MIT License
199 stars 52 forks source link

Support for stream #12

Open angedelamort opened 5 years ago

angedelamort commented 5 years ago

I was wondering if you could add support for FileStream (or Stream in general)?

Since we usually use files for computing the CRC, I find it annoying to load the file in memory in order to get all the bytes. When you have big files, it's not really good practice. And I saw that most of libraries use the same interface as yours.

So, that's what I can do right now:

var bytes = File.ReadAllBytes(path);
var crc32 = Crc32Algorithm.Compute(bytes);

What would be nice:

using (var stream = new FileStream(path, FileMode.Open))
{
    var crc32 = Crc32Algorithm.Compute(stream);
}

Thanks

InvisiblePhil commented 5 years ago

I happened to need/want this too, so see #14 if you want to try out my proposed implementation

force-net commented 5 years ago

Will check it later. Thank you.

kgamecarter commented 5 years ago

you can

using (var stream = new FileStream(path, FileMode.Open))
using (var crc = new Crc32Algorithm())
{
    var crc32bytes = crc.Compute(stream);
    var crc32 = BitConverter.ToUInt32(crc32bytes, 0);
}
InvisiblePhil commented 5 years ago

Doh, didn't realise the base class did that. Looking at the source it's very similar to what I hacked together (right down to the 4kb buffer size). Closing my PR as redundant.