![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Постоялец
![]() ![]() Пол:
Регистрация: 11.07.2008
Адрес: Украина, Львов
Сообщений: 277
Репутация: 82
|
Как средствами Delphi определить, является ли файл текстовым. То есть, не по расшырению, а так, скажем файл somefile.dat это текстовый файл или картинка
|
|
|
|
| Реклама: |
|
|
#2
|
|
Постоялец
![]() ![]() Пол:
Регистрация: 13.03.2008
Адрес: Минск
Сообщений: 257
Репутация: 231
|
Можно рассматривать заголовок файла. Иногда на практике возникает такая проблема. Открываю любой файл как текстовый там практически всегда в заголовке есть реальной расширение этого файла, а не то которое стоит после точки в названии. Может так?
__________________
|
|
|
|
|
|
#3
|
|
Постоялец
![]() ![]() Пол:
Регистрация: 11.07.2008
Адрес: Украина, Львов
Сообщений: 277
Репутация: 82
|
А какой заголовок имееться ввиду?
|
|
|
|
|
|
#4
|
|
Неактивный пользователь
Регистрация: 15.07.2009
Сообщений: 2
Репутация: 1
|
Vasuha, имелл ввиду что обычно первые 3-4 байта файла имею назвиние своего формата.
Например: у файлов .rar - в 3х байтах записано Rar! (52 61 72 21) у файлов zip - PK (50 4B) как вариант необходимо считать инфу ЗА этими 3-4мя символами и проверить их на текст(в делфи можно использовать множества, проверка типа if buf[i] in [a..z] then и тп) |
|
|
|
|
|
#5
|
|
bssergy, гуглим по запросу "Работа с нетипизированныи файлами Delphi", там и смотрим что такое заголовок, какими байтами он определяется и как его считать
__________________
Хочу машину, дачу и бабу в придачу. |
|
|
|
|
|
|
#6
|
|
Новичок
![]() Пол:
Регистрация: 05.01.2010
Сообщений: 19
Репутация: 2
|
Никакими средствами ты не определишь, является ли файл строго текстовым или нет... Легко сделать бинарный файл, в котором будут только байты, отображаемые в первые 127 символов и текстовый файл, допустим в кодировке UTF - и все...
Уточни задачу... |
|
|
|
|
|
#7
|
|
Неактивный пользователь
Пол:
Регистрация: 26.03.2009
Сообщений: 4
Репутация: 1
|
Ищи управляющие символы текстовых файлов, например - перевода строки.
|
|
|
|
|
|
#8
|
|
Неактивный пользователь
Пол:
Регистрация: 21.02.2010
Сообщений: 5
Репутация: 1
|
описание форматов файлов
http://www.wotsit.org/ |
|
|
|
|
|
#9
|
|
Неактивный пользователь
Пол:
Регистрация: 29.05.2007
Сообщений: 10
Репутация: 1
|
Есть метод определения по частоте символов (в сети есть частотные словари для этого), если частота символов приближена к словарю, то это текст в наибольшей вероятностью, проблема только с кодировками, если это русский текст, то на каждую кодировку должен быть свой словарь...
|
|
|
|
|
|
#10
|
|
Неактивный пользователь
Регистрация: 24.06.2009
Сообщений: 5
Репутация: 1
|
Текстовый файл отличается тем что он разбит на разные по длине строки, отделенные символами #13#10.
|
|
|
|
|
|
#11
|
|
Неактивный пользователь
Регистрация: 02.03.2010
Сообщений: 1
Репутация: 0
|
В текстовом файле по идее не должно быть символов с кодом < 32, за исключением #$09, #$0A, #$0D. Соответственно читаем файл и ищем в нём непечатные символы. Наверное можно ограничиться поиском #$00, который всегда есть в .exe, .doc, но не всегда присутсвует в rtf например. Всё зависит от ТЗ
|
|
|
|
|
|
#12
|
|
Неактивный пользователь
Регистрация: 31.01.2010
Сообщений: 4
Репутация: 3
|
А если представить, что наш файл - в DOS кодировке и в нем используется ASCII-арт, то ваше предположение рушится ![]() Самым разумным решение все-таки представляется чтение хидера, хотя и тут без подводных камней не обойтись... |
|
|
|
|
|
#13
|
|
Неактивный пользователь
Пол:
Регистрация: 10.01.2007
Сообщений: 19
Репутация: 4
|
не парьтесь ребятя имхо никак расширение файла внутри не у всех файлов есть. Вариант с символами код которых <=32 тоже не прокатит. мне однажды попадался файл с расширением .Txt внутри был текст и он смобрелся блокнотом, Однако при переименовании его расширения в .com он стартовал и работал как программа... Посему рекомендую на эту траблу забить , вознести молитву создателю файла, чтобы он вас не обманул, раз уж расширение txt то должон быть текст внутри...
|
|
|
|
|
|
#14
|
|
Неактивный пользователь
Регистрация: 15.11.2010
Сообщений: 1
Репутация: 0
|
Частотный анализ затруднен, если неизвестен язык (кодировка)
А вот символы #13 и №10 (не обязательно в паре, что тоже надо учитывать), которых в текстовом файле может не быть (ну не разбит он на строки) надо сопрягать с анализом пробела (и других разделителей), который является наиболее явным признаком текстового файла. Причем кодировка и осмысленность языка не играют никакой роли при таком анализе. То есть ведем частотный анализ длины слов, разбитых по пробелам, табуляциям и переводам строк (а также, только это сложнее, дефисам/тире, точкам и прочим знакам препинания, но там результат не однозначен). Как-то так. |
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| XML файлы в Delphi 7 | Чех | Delphi | 9 | 04.02.2010 12:50 |
| ZD2T - консольный конвертер в текстовые файлы | sd6719 | Офис | 0 | 01.11.2008 19:33 |
| Castalia for Delphi 2008.1 - эксперт IDE Delphi | Minotawr | Компоненты | 0 | 03.09.2008 01:17 |
| W950i текстовые файлы... | rubab | Sony Ericsson | 2 | 05.07.2007 20:18 |
|
|