Двоичные файлы

uruk

Новичок
Универсального нет.
Только проверять сигнатуры (или как они называются) в файлах.
Соотвественно,Ю нужно знать эти самые сигнатуры для десятков типов файлов.
 

ForJest

- свежая кровь
maloii
Могу предложить подсчитать количество символов \x00-\x20 (минус \x08 \x09 \x0A \x0D) в файле. Если их больше некоего процента - тогда считать файл двоичным :). Достаточно хорошая эмпирическая оценка будет.
Ещё метод - найти самую длинную строку - т.е. расстояние между символами \n и \n. Если она больше некоторого значения, или опять же больше некоторого % от длины файла - тоже считать двоичным.
Можно сделать множество характеристик, вероятностых. И на основании комбинации определять "двоичность" файла.
 

physh

поедатель запятых
Автор оригинала: maloii
не мне нужно более уневерсальное решение этой проблемы.
ГЫ.. А чем идея создания списка открываемого / неоткрываемого тебе не подходит?
Ну или установить папки, в которых редактируемые файлы, а в кторых - нет...
 

SiMM

Новичок
> Могу предложить подсчитать количество символов \x00-\x20 (минус \x08 \x09 \x0A \x0D) в файле. Если их больше некоего процента - тогда считать файл двоичным :)
Неуниверсально :) С файлами в кодировках типа UTF-16, UTF-32 не прокатит :) (это же тоже "текстовые" файлы :) )

> мне нужно более уневерсальное решение этой проблемы.
Более универсально считать все файлы бинарными :) Тем более, что они на самом деле таковыми и являются ;) Поскольку текстовые файлы - это лишь подмножество бинарных.
 

Crazy

Developer
Автор оригинала: maloii
не мне нужно более уневерсальное решение этой проблемы.
Спроси у разработчиков Notepad'а, почему они не сделали такую простую штуку, как предотвращение правки двоичных файлов в их редакторе... :)
 

ForJest

- свежая кровь
SiMM
А ещё какие случаи?
Crazy
А у тебя есть контакты разработчиков Notepad?
 

master_x

Pitavale XXI wieku
bool is_executable ( string filename )
Returns TRUE if the filename exists and is executable.
поможет определить тебе исполняемые файлы. с остальными сам клепайся. задача странная. вообще напиши список разрешенных расширений и все.
 

zap

Guest
может ответиш нам всем на вопрос: а за каким хером вообще было придумано расширение файла?
 

RushHourRider

Новичок
Хм.. Насколько мне известно, все файлы являются двоичными, то бишь, бинарными. Чтобы ОС разобралась, что же ей, собственно, делать с файлом придумали расширение (в юниксах расширение в принципе не нужно, так как ОС нужно лишь знать - выполнять ей этот файл или не выполнять).

Ну дык вот. Расширение - вещь относительная, но полезная. Нужно помнить, что это лишь подсказка для того, чтобы догадаться что за инфа внутри. Никто не мешает взять текстовый файл some.txt и переименовать его в some.jpg - информация никуда не денется.

Итак, предположу, что мистер maloii захотел предсказать тип файла чтобы корректно его обработать в своей программе. Тут все просто - качай http://pecl.php.net/package/Fileinfo , читай, изучай, пользуйся. Кстати, во многих форматах файлов есть заголовок предназначенный для программы декодирования (будь то mp3 или jpeg). Это тоже можно использовать.
 

uliss

Новичок
Посчитай с статистическое распределение символов в файле.
Если более определенного процента символов не текстовые - файл бинарный.
А этот процент определишь сам.

Или используй UNIX команду file - придется составлять список того, что разрешено.

изивините за повтор - не увидел второй стр.
- заработался
 

master_x

Pitavale XXI wieku
может ответиш нам всем на вопрос: а за каким хером вообще было придумано расширение файла?
свой х.р можешь оставить при себе. это я к тому, что в НОРМАЛЬНЫХ системах, где файлы создаются НОРМАЛЬНЫМИ людьми при помощи НОРМАЛЬНЫХ редакторов расширение файла может быть очень полезным.
 

tony2001

TeaM PHPClub
кто-нибудь задавался вопросом - почему вдруг нельзя редактировать бинарные файлы?
или все согласны с этим утверждением?
 

ForJest

- свежая кровь
tony2001
Потому что человек делает редактор текстовых файлов.
 

tony2001

TeaM PHPClub
почему бы не сделать тогда редактор текстовых-файлов-написанных-только-в-этом-редакторе-текстовых-файлов?
сразу появляется еще одна очень интересная проблема - как без изменения и добавления текста определить, что файл был создан именно в этом редакторе?
по степени надуманности проблема ни чем не лучше обсуждаемой.
 

ForJest

- свежая кровь
tony2001
Ну это из области уже "Почему невозможно изнасиловать девушку на Красной площади?" :).
Какая разница - человек спросил, а дельных советов раз-два и обчёлся. А получился тупой флейм :)
 
Сверху