2010-05-27 27 views
5

Tôi có một C# thành phần đó sẽ nhận được một tập tin của các loại sau đây .doc, .pdf, .xls, .rtfTìm ra một cách tập tin bằng cách tìm kiếm nội dung nhị phân của nó. Khả thi?

Những điều này sẽ được gửi bằng ứng dụng di sản Siebel gọi như một FileStream.

Vậy ...

[LegacyApp] >> {dòng tập tin nhị phân} >> [Component]

Ứng dụng di sản là một hộp đen mà không thể được sửa đổi để cho các thành phần loại tập tin (doc, pdf, xls) nó đang gửi. Thành phần cần đọc luồng nhị phân này và tạo một tệp trên hệ thống tệp có phần mở rộng phù hợp.

Bất kỳ ý tưởng nào?

Cảm ơn thời gian của bạn.

Trả lời

7

Trên các hệ thống dựa trên Linux/Unix, bạn có thể sử dụng lệnh tập tin, nhưng tôi giả sử bạn muốn làm điều này bằng tay mình trong mã ...

Nếu tất cả các bạn có thể truy cập đến là dòng byte của tập tin, thì bạn sẽ cần phải xử lý từng loại tệp một cách độc lập.

Hầu hết các chương trình/thành phần làm những gì bạn đang tự hỏi thường đọc vài byte đầu tiên và tạo phân loại dựa trên đó. Ví dụ: các tệp GIF bắt đầu bằng một trong các cách sau: GIF87a hoặc GIF89a

Nhiều định dạng tệp có cùng chữ ký ở đầu tệp hoặc có cùng định dạng tiêu đề. Chữ ký này được gọi là magic number as described by me on this post.

Một nơi tốt để bắt đầu là truy cập www.wotsit.org. Nó chứa các thông số định dạng tệp có thể tìm kiếm theo loại tệp. Bạn có thể xem các loại tệp quan trọng mà bạn muốn xử lý và xem liệu bạn có thể tìm thấy một số yếu tố xác định trong các định dạng tệp đó hay không.

Bạn cũng có thể tìm kiếm trên Google để tìm và tìm thư viện phân loại này hoặc xem mã nguồn của lệnh tệp.

+0

Cảm ơn. sẽ xem xét điều này – user20358

+0

Nếu bạn muốn xử lý trong mã, thì các tùy chọn duy nhất của bạn là xem xét các byte và tìm ra loại tệp dựa trên đó. Hầu hết các tệp có một số loại tiêu đề trong vài byte đầu tiên mô tả dữ liệu, định dạng, v.v. – Justin

0

Trên linux, có một lệnh gọi là file. Cho một tệp tùy ý, nó cố gắng xác định loại tệp đó là gì. Ví dụ:

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 

Đó là từ một vài tệp ngẫu nhiên nằm quanh thư mục chính của tôi.

+0

Im làm việc trên thành phần .net sẽ được triển khai trên môi trường cửa sổ. – user20358

0

Đúng. Xem file.

Và vui lòng không phát minh lại bánh xe. Nó hoạt động tốt như thế nào.

+2

Tất nhiên, bánh xe đặc biệt này hoạt động dưới Linux. Không phải là nền tảng chung để nhắm mục tiêu với C#. – Jens

+0

@ Jens - Đó là nền tảng thực sự. Không phải là loại nền tảng để nhắm mục tiêu với C#. – amphetamachine

+0

Cảm ơn Jens, tôi đã nhìn vào một cái gì đó giống như một chữ ký tập tin cho mỗi loại tôi đã đề cập. – user20358

1

Bạn có thể quan tâm đến việc này: http://en.wikipedia.org/wiki/Magic_number_(programming)

Hầu hết các định dạng nhị phân chứa một con số kỳ diệu ngay từ đầu họ. Nếu bạn chỉ phải nhận dạng một số định dạng nhất định, bạn nên kiểm tra một vài byte đầu tiên của một tệp mới đến và đoán chính xác phần mở rộng tệp thích hợp.

+0

Cảm ơn, nhưng số ma thuật có vẻ giống nhau trên tất cả các tệp MS Office (doc, xls, rtf). Tôi cũng cần phải phân biệt giữa chúng. – user20358

1

Có điều này là có thể, vì các tệp MS Office (97-2007 hoặc ở xa) bắt đầu bằng D0CF11E và sau đó có một điểm đánh dấu loại phụ ở byte 512.

Một tài liệu tham khảo cho những là tại địa chỉ: http://www.garykessler.net/library/file_sigs.html

này có vẻ là danh sách tốt nhất xung quanh, với tất cả các loại định dạng tập tin - đó là tài liệu tham khảo chính trên wikipedia.

Nó không cung cấp đầy đủ chi tiết về định dạng Office mới, vì vậy đây là ví dụ của riêng tôi. Các tệp DOCX bắt đầu bằng "PK" (về mặt kỹ thuật chúng là các tệp zip) và sau đó chứa chuỗi "word/_rels/document.xml.rels" trong khi XLSX chứa "xl/_rels/workbook.xml.rels".

Các vấn đề liên quan