Programatically узнают тип файла путем взгляда его двоичного содержания. Возможный?

У меня есть c# компонент, который получит файл следующих типов .doc, .pdf, .xls, .rtf

Они будут отправлены вызовом siebel приложение прежней версии как filestream.

Так...

[LegacyApp]>> {поток Двоичного файла}>> [Компонент]

Приложение прежней версии является черным квадратом, что наклон быть измененным для сообщения компонента, какой тип файла (документ, PDF, xls) это отправляет. Компонент должен считать этот двоичный поток и создать файл в файловой системе с правильным расширением.

Какие-либо идеи?

Спасибо за внимание.

6
задан user20358 27 May 2010 в 13:45
поделиться

4 ответа

В системах на базе Linux / Unix вы можете использовать команду file, но я предполагаю, что вы хотите сделать это вручную самостоятельно в коде ...

Если у вас есть доступ только к байтам поток файла, тогда вам нужно будет обрабатывать каждый тип файла независимо.

Большинство программ / компонентов, которые делают то, что вам интересно, обычно читают первые несколько байтов и на их основе составляют классификацию. Например, файлы GIF начинаются с одного из следующих символов: GIF87a или GIF89a

Многие форматы файлов имеют одинаковую подпись в начале файла или имеют одинаковый формат заголовка. Эта подпись называется магическим числом , как описано мной в этом посте .

Хорошее место для начала - это www.wotsit.org . Он содержит спецификации формата файла, доступные для поиска по типу файла. Вы можете посмотреть на важные типы файлов, с которыми вы хотите работать, и посмотреть, сможете ли вы найти какой-либо определяющий фактор в этих форматах файлов.

Вы также можете выполнить поиск в Google, чтобы попытаться найти библиотеку, которая выполняет эту классификацию, или посмотрите исходный код команды file.

7
ответ дан 10 December 2019 в 00:34
поделиться

Ага. См. файл .

И, пожалуйста, не изобретайте велосипед. Работает отлично, как есть.

0
ответ дан 10 December 2019 в 00:34
поделиться

В Linux есть команда под названием файл . Для произвольного файла он пытается определить, что это за файл. Например:

gzip compressed data, from Unix, last modified: Fri Jun 12 20:16:28 2009
HTML document text
vCalendar calendar file
RCS/CVS diff output text

Это несколько случайных файлов, лежащих в моем домашнем каталоге.

0
ответ дан 10 December 2019 в 00:34
поделиться

Возможно, вас заинтересует это: http://en.wikipedia.org/wiki/Magic_number_(программирование)

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

1
ответ дан 10 December 2019 в 00:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: