Как определить, является ли файл не текстовым файлом в c # - PullRequest
2 голосов
/ 20 января 2011

Мне нужно прочитать много файлов и найти в них определенный текст. Я хочу открывать только текстовые файлы, то есть без изображений, фильмов и т. Д. Я ищу способ идентифицировать нетекстовые файлы. Поскольку я буду использовать FileStream и выполнять поиск байтов, мне кажется, что я могу прекратить чтение и закрыть файл, если обнаружен байт, десятичное значение которого больше 128. Кажется ли это хорошим подходом?

Ответы [ 3 ]

3 голосов
/ 20 января 2011

На этот вопрос нет надежного ответа.Если вы знаете, что любые текстовые файлы будут когда-либо содержать только символы ASCII (и закодированы в ASCII, UTF-8 или что-то подобное), тогда да, это будет работать ... хотя может не перехватить все нетекстовыефайлы.

Однако:

  • Это не удастся для любых текстовых файлов, использующих текст не-ASCII
  • Это может все же произойти сбой для файла, который является допустимым двоичным файломдля некоторого формата, но не содержит значений выше 128.

Представляет ли последовательность байтов {34, 87, 23, 10} текстовые или двоичные данные?Там просто нет возможности узнать наверняка. Все, что вы сделаете * 1014, будет эвристическим.

0 голосов
/ 20 января 2011

Вы можете просто проверить расширение файла, если ".txt, .cvs" и т. Д .?

Дело в том, что вам нужно знать кодировку: Как определить кодировку / кодовую страницу текстового файла

0 голосов
/ 20 января 2011

Не уверен, если это домашнее приложение, и вы просто хотите быстрое и грязное решение.

Если это так, вы можете использовать Path.GetExtension

    string p = @"C:\Myfile.txt";
    string e = Path.GetExtension(p);
    if (e == ".txt")
    {
       //do stuff; process the file
    }

Имейте в видучто расширение не определяет тип данных.Это полезно только в том случае, если вы можете гарантировать, что тип расширения является типичным для данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...