W takim przypadku md5 odpada. Możesz porównać ilość danych, które zostały wysłane do użytkownika. Jeśli ilość danych == wielkość pliku, to znaczy, że został pobrany w całości.
Ale np. ja używam GetRight'a i zapuszczam 4 równoległe połączenia. Plik ściągam w całości, ale na każdym połączeniu tylko 1/4 jego wielkości. Wtedy albo nie nabijesz licznika wcale, albo zrobisz to 4 razy