Конечно, это будет работать только для реального ASCII. Не для других персонажей с акцентами

могу проверить, является ли файл, который я открываю в C #, используя FileStream, файлом "текстового типа"? Я хотел бы, чтобы моя программа открывала любой текстовый файл, например, .txt, .html и т. Д.

Но нельзя открывать такие вещи, как .doc или .pdf или .exe и т. Д.

 Academy of Programmer14 дек. 2015 г., 21:29
Проверьте это решениеfilesignatures.codeplex.com
 Sev20 янв. 2011 г., 09:40
Ну, если это текстовый файл, расширение которого было изменено, то это может быть в теории.
 Danny Chen20 янв. 2011 г., 09:38
Так что возможно, чтоa.exe такое текстовый файл (в вашей программе)?
 Sev20 янв. 2011 г., 09:36
да. важно содержимое файла, а не расширение.
 Danny Chen20 янв. 2011 г., 09:35
Создатьтекст файл и переименуйте его вmyfile.abc, это все еще файл типа текста в ваших глазах?

Ответы на вопрос(3)

Текстовый файл, хранящийся в UTF-16, вероятно, будет выглядеть как двоичный, если вы откроете его с 8-битной кодировкой. Точно так же кто-то может сохранить текстовый файл как.doc (это документ).

В то время как вы можете открыть файл и посмотреть на некоторый контент, все такие эвристики иногда будут давать сбой (например, блокнот пытается это сделать, при тщательном выборе нескольких символов блокнот угадает неправильно и отображает совершенно другой контент).

Если у вас есть конкретный сценарий, вместо того, чтобы открывать и обрабатывать что-либо, у вас должно получиться намного лучше.

Решение Вопроса

вы могли бы просто проверить первые 1000 (произвольное число) символов и посмотреть, есть ли непечатаемые символы или все они находятся в определенном диапазоне. Если последнее, предположить, что это текст?

Что бы вы ни делали, это будет предположение.

 Wouter20 янв. 2011 г., 09:50
и, возможно, проверить на регулярные интервалы пробелов и новых строк

Чтобы получитьреальный тип файла, вы должны проверить его заголовок, который не будет изменен, даже если расширение будет изменено. Вы можете получить список заголовковВоти используйте что-то вроде этого в вашем коде:

using(var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
   using(var reader = new BinaryReader(stream))
   {
     // read the first X bytes of the file
     // In this example I want to check if the file is a BMP
     // whose header is 424D in hex(2 bytes 6677)
     string code = reader.ReadByte().ToString() + reader.ReadByte().ToString();
     if (code.Equals("6677"))
     {
        //it's a BMP file
     }
   }
}
 MacGyver25 февр. 2012 г., 20:19
Мне интересна ваша ссылка на "здесь", но она не работает. Вы знаете, что это был за URL или какой новый?
 Danny Chen26 февр. 2012 г., 11:09
@MacGyver: Извините, сломанная ссылка находится вне моего контроля. Я сталкивался с этим решением в чужом посте.
 mafu27 апр. 2012 г., 14:16
Этот подход ошибочен. Невозможно провести различие между файлом BMP и файлом, который начинается с символов «BM», что, скорее всего, произойдет.

Ваш ответ на вопрос