<script>
function checkIsMobile(){
if(navigator.userAgent.indexOf("Mobile") > 0){
return true;
}else{
return false;
}
}
</script>
Если вы зайдете в любой браузер и попытаетесь получить navigator.userAgent, мы получим информацию о браузере примерно так:
Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 64.0.3282.186 Safari / 537.36
То же самое, если вы делаете в мобильном телефоне, вы получите следующее
Mozilla / 5.0 (Linux; Android) 8.1.0; Pixel Build / OPP6.171019.012) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 61.0.3163.98 Mobile Safari / 537.36
Каждый мобильный браузер будет иметь useragent со строкой, содержащей «Мобильный» Так что я использую приведенный выше фрагмент в своем коде, чтобы проверить, является ли текущий пользовательский агент веб / мобильным. На основании результата я буду вносить необходимые изменения.
Если вам действительно нужно, чтобы это работало так, я бы сделал это (чтобы убедиться, что он работает с помощью клавиатуры и мыши)
// Not sure if BufferedStream should be wrapped in using block
using(var stream = new BufferedStream(File.OpenRead(filePath), 1200000))
{
// The rest remains the same
}
Не проверяйте контрольную сумму для всего файла, создавайте контрольные суммы каждые 100 МБ или около того, поэтому каждый файл имеет набор контрольных сумм.
Затем при сравнении контрольных сумм вы можете прекратить сравнение после первого другого контрольная сумма, раннее получение и избавление от обработки всего файла.
Это все равно займет полное время для идентичных файлов.
Вызов порта Windows md5sum.exe . Это примерно в два раза быстрее, чем реализация .NET (по крайней мере, на моем компьютере с файлом размером 1,2 ГБ)
public static string Md5SumByProcess(string file) {
var p = new Process ();
p.StartInfo.FileName = "md5sum.exe";
p.StartInfo.Arguments = file;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
p.WaitForExit();
string output = p.StandardOutput.ReadToEnd();
return output.Split(' ')[0].Substring(1).ToUpper ();
}
Вы делаете что-то неправильно (вероятно, слишком маленький буфер чтения). На машине невысокого возраста (Athlon 2x1800MP с 2002 года), на диске которой есть DMA, вероятно, неисправен (6,6 Мбит / с чертовски медленно при выполнении последовательных чтений):
Создайте файл размером 1 ГБ со «случайными» данными:
# dd if=/dev/sdb of=temp.dat bs=1M count=1024
1073741824 bytes (1.1 GB) copied, 161.698 s, 6.6 MB/s
# time sha1sum -b temp.dat
abb88a0081f5db999d0701de2117d2cb21d192a2 *temp.dat
1м5.
Ok - thanks to all of you - let me wrap this up: