1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace OpenSubtitlesHandler
- {
- public class MovieHasher
- {
- public static byte[] ComputeMovieHash(string filename)
- {
- byte[] result;
- using (Stream input = File.OpenRead(filename))
- {
- result = ComputeMovieHash(input);
- }
- return result;
- }
- private static byte[] ComputeMovieHash(Stream input)
- {
- long lhash, streamsize;
- streamsize = input.Length;
- lhash = streamsize;
- long i = 0;
- byte[] buffer = new byte[sizeof(long)];
- while (i < 65536 / sizeof(long) && (input.Read(buffer, 0, sizeof(long)) > 0))
- {
- i++;
- lhash += BitConverter.ToInt64(buffer, 0);
- }
- input.Position = Math.Max(0, streamsize - 65536);
- i = 0;
- while (i < 65536 / sizeof(long) && (input.Read(buffer, 0, sizeof(long)) > 0))
- {
- i++;
- lhash += BitConverter.ToInt64(buffer, 0);
- }
- input.Close();
- byte[] result = BitConverter.GetBytes(lhash);
- Array.Reverse(result);
- return result;
- }
- public static string ToHexadecimal(byte[] bytes)
- {
- StringBuilder hexBuilder = new StringBuilder();
- for (int i = 0; i < bytes.Length; i++)
- {
- hexBuilder.Append(bytes[i].ToString("x2"));
- }
- return hexBuilder.ToString();
- }
- }
- }
|