Что нового

Как определить текстовый и бинарный файл

Andrey_A

Продвинутый
Сообщения
327
Репутация
68
Всем добрый день! Подскажите функцию проверки, чтобы определить текстовый или бинарный файл.
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Наверно по поиску управляющих символов в файле
Код:
$sText = FileRead(@ScriptDir&'\file.txt')
If StringRegExp($sText, '[\x{00}-\x{08}\x{0E}-\x{1F}\x{7F}]') Then
	MsgBox(0, 'Сообщение', 'Файл бинарный')
Else
	MsgBox(0, 'Сообщение', 'Файл текстовый')
EndIf


Обновил...
 
Автор
A

Andrey_A

Продвинутый
Сообщения
327
Репутация
68
AZJIO [?]
Наверно по поиску управляющих символов в файле
Спасибо, но не отрабатывает правильно, html показывает как бинарный. Немного поэкспериментировал, добавил поверку по 36 символам:
Код:
$sText = FileRead(@ScriptDir&'\file.txt',36)


Параллельный вопрос: по какому количеству первых символов лучше определять?

------------
Добавил:
Нашёл такую тему: Бинарный или текстовый?

Может, кто сможет перевести с C+ на Autoit? Или это лишнее?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Можно по сигнатуре:
Код:
;~ $sFileName = 'my.txt'
;~ $sFileName = 'my.dll'
$sFileName = 'my.html'
$hFile = FileOpen($sFileName, 16)
If $hFile = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf

$iByte = FileRead($hFile, 2)
If StringCompare($iByte, '0x4D5A') = 0 Then ; exe, dll, ocx
	ConsoleWrite('Бинарный файл!' & @CR)
Else
	ConsoleWrite('Текстовый файл!' & @CR)
EndIf

FileClose($hFile)

А вообще текстовый файл это то же бинарного файла. Просто разный формат записи данных.
 
Автор
A

Andrey_A

Продвинутый
Сообщения
327
Репутация
68
Вариант отmadmasles
работает в 95% - спасибо, хотя если ещё будут какие-нибудь варианты или проверки, то будет хорошо)
 
Автор
A

Andrey_A

Продвинутый
Сообщения
327
Репутация
68
madmasles

У меня результат улучшился, когда уменьшил количество символов:

Код:
$sText = FileRead($sFileName,8)


Ещё надо тестировать... 16 тоже нормально.
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Обновил, там были переносы строк и прочие пробельные символы.
Код:
$sText = FileRead(@ScriptDir&'\file.txt')
If StringRegExp($sText, '[\x{00}-\x{08}\x{0E}-\x{1F}\x{7F}]') Then
	MsgBox(0, 'Сообщение', 'Файл бинарный')
Else
	MsgBox(0, 'Сообщение', 'Файл текстовый')
EndIf


Вообще нужно определится что такое бинарный файл, тогда можно задать диапазон.
 
Верх