У меня нет никаких доказательств этого, кроме моих наблюдений, но, похоже, может пройти несколько минут, прежде чем ключ API станет активным после его установки.
Мне показалось немного терпения!
Я бы, вероятно, поискал множество управляющих символов, которые обычно присутствуют в двоичном файле, но редко в текстовом файле. Двоичные файлы, как правило, используют 0 достаточно, чтобы просто проверить множество 0 байтов, вероятно, было бы достаточно для обнаружения большинства файлов. Если вы заботитесь о локализации, вам также необходимо протестировать многобайтовые шаблоны.
Однако, как уже говорилось, вам всегда может не повезти и вы получите двоичный файл, который выглядит как текст или наоборот.
Есть метод, называемый цепями Маркова. Просканируйте несколько файлов моделей обоих типов и для каждого байтового значения от 0 до 255 соберите статистику (в основном вероятность) следующего значения. Это даст вам профиль размером 64 КБ (256x256), с которым вы сможете сравнить свои файлы времени выполнения (в пределах% порогового значения).
Предположительно, именно так работает функция автоматического определения кодирования браузеров.
Действительно, очень грязный способ - создать регулярное выражение, которое принимает только стандартный текст, знаки препинания, символы и пробелы, загрузить часть файла в текстовый поток, а затем запустить это против регулярного выражения. В зависимости от того, что квалифицируется как чистый текстовый файл в вашей проблемной области, отсутствие успешных совпадений будет указывать на двоичный файл.
Чтобы учесть юникод, не забудьте отметить кодировку в вашем потоке как таковую.
Это действительно неоптимально, но вы сказали быстро и грязно.
Быстро и грязно - использовать расширение файла и искать общие текстовые расширения, такие как .txt. Для этого можно использовать вызов Path.GetExtension . Все остальное не может быть классифицировано как «быстрое», хотя вполне может быть грязным.
http://codesnipers.com/?q=node/68 описывает, как определить UTF-16 по сравнению с UTF-8 с помощью метки порядка байтов (которая может появиться в вашем файл). Он также предлагает пройти через несколько байтов, чтобы проверить, соответствуют ли они шаблону многобайтовой последовательности UTF-8 (ниже), чтобы определить, является ли ваш файл текстовым.