детект файла
От: alku  
Дата: 16.06.04 15:31
Оценка:
как можно определить являеться ли файл бинарным или текстовым? просьба учитывать все енкодинги возможные в .NET... по преабулам уже детекчу, но это не дает гарантий...

жду идей
Re: детект файла
От: Igor Trofimov  
Дата: 16.06.04 18:07
Оценка:
A>как можно определить являеться ли файл бинарным или текстовым? просьба учитывать все енкодинги возможные в .NET... по преабулам уже детекчу, но это не дает гарантий...

Давай определение текстового файла. Вот например, html — это текст или не текст. (Давно-давно на этот вопрос один знакомый ответил: нет, не текст.. это... это.. гипертекст! )

Когда определение будет — то есть задача будет поставлена нормально — то ответ придет сам собой.
Re[2]: детект файла
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.06.04 00:18
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

A>>как можно определить являеться ли файл бинарным или текстовым? просьба учитывать все енкодинги возможные в .NET... по преабулам уже детекчу, но это не дает гарантий...


iT>Давай определение текстового файла. Вот например, html — это текст или не текст. (Давно-давно на этот вопрос один знакомый ответил: нет, не текст.. это... это.. гипертекст! )


iT>Когда определение будет — то есть задача будет поставлена нормально — то ответ придет сам собой.


Сдается мне, что вопрос определен довольно четко. Бинарные файлы есть бинарные. Определение я тебе могу дать. Текстовый файл — это файл который может читать человек используя плэйн-текст-редактор вроде ноотпэда. ХТМЛ, ХМЛ и т.п. входят в это понятие. Теперь попробуй дать ответ.

ЗЫ

Человек спрашивает об алгоритме определения того является ли файл тексовым или бинарным. В принципе это заключение можно сделать по наличию в файле некоторых непечатных символов, но файл может быть юникодным, что усложняет задачу.
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: детект файла
От: Vovo4K Россия  
Дата: 17.06.04 06:36
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Сдается мне, что вопрос определен довольно четко. Бинарные файлы есть бинарные. Определение я тебе могу дать. Текстовый файл — это файл который может читать человек используя плэйн-текст-редактор вроде ноотпэда. ХТМЛ, ХМЛ и т.п. входят в это понятие. Теперь попробуй дать ответ.


Текстовый — частный случай, бинарный — общий, так ведь?
Задача — отделить случай, когда файл НЕ является текстовым.
А текстовые редакторы бывают разные. "Вроде ноутпада" — расплывчато как-то.
Компьютер — совершенно незаменимая вещь: он позволяет решать такие проблемы, которые без него даже не возникают!
Re[3]: детект файла
От: Воронков Василий Россия  
Дата: 17.06.04 06:40
Оценка:
"VladD2" <73@news.rsdn.ru> wrote in message news:682487@news.rsdn.ru...

Можно сканировать файл на наличие нулевых байтов и, если они будут найдены, расценивать его как бинарный.
Posted via RSDN NNTP Server 1.9 beta
Re[4]: детект файла
От: Vovo4K Россия  
Дата: 17.06.04 06:49
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Можно сканировать файл на наличие нулевых байтов и, если они будут найдены, расценивать его как бинарный.


Это может оказаться юникодовый текстовик.
Компьютер — совершенно незаменимая вещь: он позволяет решать такие проблемы, которые без него даже не возникают!
Re[5]: детект файла
От: Воронков Василий Россия  
Дата: 17.06.04 06:50
Оценка:
"Vovo4K" <18934@news.rsdn.ru> wrote in message news:682721@news.rsdn.ru...
> Это может оказаться юникодовый текстовик.

Ну способа, дающего стопроцентную гарантию пожалуй нет. Например VSS поступает так, как я описал.
Posted via RSDN NNTP Server 1.9 beta
Re[5]: детект файла
От: alku  
Дата: 17.06.04 06:57
Оценка:
Здравствуйте, Vovo4K, Вы писали:

VK>Здравствуйте, Воронков Василий, Вы писали:


ВВ>>Можно сканировать файл на наличие нулевых байтов и, если они будут найдены, расценивать его как бинарный.


VK>Это может оказаться юникодовый текстовик.


я щас придумал пару альтернатив:
1. частотный анализ файла... в принципе решенье по уму, но требует много статистики для каждого енкодинга... так делает FAR, но и он иногда ошибаеться...

2. если в файле находиться последовательность нулей от четырех и выше... т.е. если мы находим последовательность из четырех нулевых байт, то с довольно большой вероятностью можно сказать что файл бинарный... но не на все файлы работает...

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

я бы остановился на первом, но меня очень смущает получение статистики... как мне например для китайского/иврита/арабского статистику получить?!

второй способ чуть проще, но и он 50% на 50%.

может еще что-то предложите?!
Re[6]: детект файла
От: Vovo4K Россия  
Дата: 17.06.04 07:24
Оценка:
Здравствуйте, alku, Вы писали:

A>может еще что-то предложите?!


по-любому придется накапливать некую статистику и при превышении некоторого уровня считать файл текстовым/не-текстовым.

Можно попробовать составить статистику по встречаемости комбинации "0x0D 0x0A"
1) если встречаются только в такой связке (менее вероятный случай — наоборот, но не раздельно) — большая прибавка в пользу гипотезы "текстовый"
2) если встречаются только ЛИБО 0x0D, ЛИБО 0x0A — не очень большая прибавка, но тоже в пользу текстовой версии.
3) если встречается и то, и другое, причем как попало — прибавка в пользу гипотезы "бинарный".

Еще можно смотреть наличие не только нулей, но вообще символов с ASCII-кодом меньше 9 (TAB). В текстовых файлах их, скорее всего, быть не должно.

Как-то так.

ЗЫ: Ну и случай Юникода — надо, скорее всего, проверять отдельным алгоритмом.
Компьютер — совершенно незаменимая вещь: он позволяет решать такие проблемы, которые без него даже не возникают!
Re: детект файла
От: V.Petrovski Беларусь  
Дата: 17.06.04 08:12
Оценка: 16 (1)
Здравствуйте, alku, Вы писали:

A>как можно определить являеться ли файл бинарным или текстовым? просьба учитывать все енкодинги возможные в .NET... по преабулам уже детекчу, но это не дает гарантий...


A>жду идей


Проверь на .txt
... << Rsdn@Home 1.1.4 beta 1 >>
Re[4]: детект файла
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.06.04 13:29
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Можно сканировать файл на наличие нулевых байтов и, если они будут найдены, расценивать его как бинарный.


В юникодном файле каждый второй может оказаться нулевым.
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: детект файла
От: mihailik Украина  
Дата: 17.06.04 17:53
Оценка:
VD>Текстовый файл — это файл который может читать человек используя плэйн-текст-редактор вроде ноотпэда. ХТМЛ, ХМЛ и т.п. входят в это понятие.

А как быть если человек не знает английского языка? Считаем файл текстовым?


Другими словами, если файл содержит только обычные буквы — это текст? UUEncode, к примеру, или Base64 выдаёт текстовый файл?

Если так, то ответ очевиден.
using( StreamReader reader=new StreamReader(filename) )
{
  return reader.ReadToEnd().IndexOf( (char)0 )>=0;
}



Если же текстом считать только то, что может читать человек, то вопрос в человеке. Я вот в арабском текстовом файле ни бельмеса не пойму.
... << Rsdn@Home 1.1.4 beta 1 >>
Re[3]: детект файла
От: Igor Trofimov  
Дата: 17.06.04 18:41
Оценка:
VD>Сдается мне, что вопрос определен довольно четко. Бинарные файлы есть бинарные. Определение я тебе могу дать. Текстовый файл — это файл который может читать человек используя плэйн-текст-редактор вроде ноотпэда.

"Может читать человек" — это четкое определение? Нда..
А если он часть может прочитать, а часть — не может? А если там одни буквы "а" и "ы" без пробелов — это тоже текстовый файл? Прочитать-то можно. То есть текстовый файл — это файл не содержащих нечитаемых символов? Тогда, думаю, решение очевидно.

Или нужно, чтобы можно было прочитать и текст был осмысленным?

Нет — нужно все-таки давать определение четче.

VD>Человек спрашивает об алгоритме определения того является ли файл тексовым или бинарным. В принципе это заключение можно сделать по наличию в файле некоторых непечатных символов, но файл может быть юникодным, что усложняет задачу.


Верно, кодировки и уникод тоже надо учесть в определении. А что касается непечатных символов, то в бинарнике их может случайно не оказаться Хотя с другой стороны, бинарник внутри может с определенной вероятностью оказаться текстом "Войны и мира" с переставленными словами

Возможно человеку сгодится анализ частоты символов разделителей и распределения длины "слов".

Но без четкого определения все-таки никуда.
Re: детект файла
От: GuinPin  
Дата: 17.06.04 19:00
Оценка: 27 (1)
Здравствуйте, alku, Вы писали:

A>как можно определить являеться ли файл бинарным или текстовым? просьба учитывать все енкодинги возможные в .NET... по преабулам уже детекчу, но это не дает гарантий...


А может бвть подойти немного с другой стороны?
Для чего требуется узнать бинарный это файл или текстовый?
... << RSDN@Home 1.1.3 stable >>
С уважением, Сошников Иван
Re[4]: детект файла
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.06.04 19:36
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Другими словами, если файл содержит только обычные буквы — это текст? UUEncode, к примеру, или Base64 выдаёт текстовый файл?


В бинарном файле не может быть довольно ограниченное число символв. В основном от нуля до 12 (или больше, точно не помню). Другое дело что есть юникод в котором симвло имеет другой размер и если анализировать по байтно, то не трудно пол символа принять за бинарные данные. Но есть алгоритмы определения юникода. Так ноотпэд перкрасно распознает юникодные файлы по их Х символам.

M>Если же текстом считать только то, что может читать человек, то вопрос в человеке. Я вот в арабском текстовом файле ни бельмеса не пойму.


Человек понятие собирательное. Это не одна личность, а вид животных.
... << RSDN@Home 1.1.4 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: детект файла
От: alku  
Дата: 18.06.04 06:55
Оценка:
Здравствуйте, GuinPin, Вы писали:

GP>Здравствуйте, alku, Вы писали:


A>>как можно определить являеться ли файл бинарным или текстовым? просьба учитывать все енкодинги возможные в .NET... по преабулам уже детекчу, но это не дает гарантий...


GP>А может бвть подойти немного с другой стороны?

GP>Для чего требуется узнать бинарный это файл или текстовый?

есть текстовый редактор (не мой), он падает когда его просят открыть бинарный файл... чтобы хоть как-то от него добиться стабильности хочу поставить на его входе проверку типа данных...

в идиале редактор должен сам это коректно отрабатывать... но как видно не судьба
Re[3]: детект файла
От: GuinPin  
Дата: 18.06.04 07:02
Оценка:
Здравствуйте, alku, Вы писали:

A>Здравствуйте, GuinPin, Вы писали:


GP>>Здравствуйте, alku, Вы писали:


A>>>как можно определить являеться ли файл бинарным или текстовым? просьба учитывать все енкодинги возможные в .NET... по преабулам уже детекчу, но это не дает гарантий...


GP>>А может бвть подойти немного с другой стороны?

GP>>Для чего требуется узнать бинарный это файл или текстовый?

A>есть текстовый редактор (не мой), он падает когда его просят открыть бинарный файл... чтобы хоть как-то от него добиться стабильности хочу поставить на его входе проверку типа данных...


A>в идиале редактор должен сам это коректно отрабатывать... но как видно не судьба


Погоди. Редактор падает в момент открытия файла. Точку, в которой он падает можно отследить, выяснить причину и поставить обработчик исключительной ситуации.
После чего останется погонять его на заведомо текстовых файлах на предмет проверки может ли он послать нафиг текстовый файл. Если может, то уже разбираться из-за чего.
ЗЫЖ Таким макаром и выяснишь что есть текстовый файл, а все остальное считай бинарными
... << RSDN@Home 1.1.3 stable >>
С уважением, Сошников Иван
Re[4]: детект файла
От: alku  
Дата: 18.06.04 07:20
Оценка:
Здравствуйте, GuinPin, Вы писали:

GP>Здравствуйте, alku, Вы писали:


GP>Погоди. Редактор падает в момент открытия файла. Точку, в которой он падает можно отследить, выяснить причину и поставить обработчик исключительной ситуации.

GP>После чего останется погонять его на заведомо текстовых файлах на предмет проверки может ли он послать нафиг текстовый файл. Если может, то уже разбираться из-за чего.
GP>ЗЫЖ Таким макаром и выяснишь что есть текстовый файл, а все остальное считай бинарными

так он зараза через раз открывает... да и вообще стал очень интересен алгоритм определения...
Re[5]: детект файла
От: GuinPin  
Дата: 18.06.04 07:37
Оценка:
Здравствуйте, alku, Вы писали:

A>так он зараза через раз открывает... да и вообще стал очень интересен алгоритм определения...


В любом случае, он же где-то падает? И при каких-то определенных условиях...
Вот и попробуй определиться где и почему.
... << RSDN@Home 1.1.3 stable >>
С уважением, Сошников Иван
Re[5]: детект файла
От: Vovo4K Россия  
Дата: 18.06.04 07:49
Оценка:
По поводу определения юникода — можно тут поглядеть.
http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=469
Компьютер — совершенно незаменимая вещь: он позволяет решать такие проблемы, которые без него даже не возникают!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.