У меня есть c# компонент, который получит файл следующих типов .doc, .pdf, .xls, .rtf
Они будут отправлены вызовом siebel приложение прежней версии как filestream.
Так...
[LegacyApp]>> {поток Двоичного файла}>> [Компонент]
Приложение прежней версии является черным квадратом, что наклон быть измененным для сообщения компонента, какой тип файла (документ, PDF, xls) это отправляет. Компонент должен считать этот двоичный поток и создать файл в файловой системе с правильным расширением.
Какие-либо идеи?
Спасибо за внимание.
В системах на базе Linux / Unix вы можете использовать команду file, но я предполагаю, что вы хотите сделать это вручную самостоятельно в коде ...
Если у вас есть доступ только к байтам поток файла, тогда вам нужно будет обрабатывать каждый тип файла независимо.
Большинство программ / компонентов, которые делают то, что вам интересно, обычно читают первые несколько байтов и на их основе составляют классификацию. Например, файлы GIF начинаются с одного из следующих символов: GIF87a или GIF89a
Многие форматы файлов имеют одинаковую подпись в начале файла или имеют одинаковый формат заголовка. Эта подпись называется магическим числом , как описано мной в этом посте .
Хорошее место для начала - это www.wotsit.org . Он содержит спецификации формата файла, доступные для поиска по типу файла. Вы можете посмотреть на важные типы файлов, с которыми вы хотите работать, и посмотреть, сможете ли вы найти какой-либо определяющий фактор в этих форматах файлов.
Вы также можете выполнить поиск в Google, чтобы попытаться найти библиотеку, которая выполняет эту классификацию, или посмотрите исходный код команды file.
Ага. См. файл
.
И, пожалуйста, не изобретайте велосипед. Работает отлично, как есть.
В 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
Это несколько случайных файлов, лежащих в моем домашнем каталоге.
Возможно, вас заинтересует это: http://en.wikipedia.org/wiki/Magic_number_(программирование)
Большинство двоичных форматов содержат магическое число в своем начале. Если вам нужно распознать только определенный набор форматов, то проверить первые несколько байтов нового входящего файла и правильно определить соответствующее расширение файла не составит труда.