我有一個C++應用程序需要支持二進制數據庫內容(圖像等)。當使用MS Access或MS SQL Server時,這些數據被包裝在一個OLE對象中。我如何去掉這個OLE頭信息?請注意,我不能只查找特定標籤的開頭,因爲內容可以是png,jpg和其他格式的整個堆。我應該使用類似COleDataObject的東西嗎?剝離OLE頭信息(MS Access/SQL Server)
回答
使用MS Access 2007年(我需要測試其他MS數據庫)的格式似乎是:
84 bytes
file name + \0
full path + \0
5 bytes + [2] bytes (the third byte of those five bytes)
temp path + \0
4 bytes
actual data (if not using a link to the file)
到目前爲止,我簡單地分析和實際數據之前剝去一部分,但我仍然不知道如果沒有辦法使用像COleDataSource這樣的東西來幫助更強大地解析這些信息。
另請注意,此格式僅適用於通用內容(開始標記0x15 0x1c 0x32)。當使用位圖(開始標記0x15 0x1c 0x2f)時,有78個字節的固定偏移量,當使用PowerPoint(開始標記0x15 0x1c 0x34)時,固定偏移量爲95個字節。
不是理想的解決方案,但我找不到更好的答案。 – 2010-05-25 13:37:01
我們確定OLE包裝總是一樣嗎? – 2010-05-25 17:48:05
對於MS Access 2007,我測試了很多種文件類型(gif,bmp,jpg,tiff,png,avi。mpg,swf,...)和格式'holds'。不幸的是,我不能輕鬆訪問其他MS數據庫系統,所以我還沒有能夠驗證它們。 – 2010-05-26 07:51:43
請參閱Stephen Lebans OleToDisk的代碼。請注意,該代碼位於VBA中。此外,我不知道這將在SQL Server中的工作。
我重新張貼作爲一個答案我的評論:
不要使用OLE領域,只要使用正規的BLOB。
我會,如果我可以:-) 不幸的是,我不能控制這部分問題(其他人/軟件寫入數據庫,我只需要閱讀它)。 – 2010-05-24 16:40:45
- 1. 「源信息剝離」的消息
- 2. 從FileInputStream或FileReader中剝離HTTP標頭信息
- 3. Sharepoint剝離HTTP頭
- 4. 剝離Windows DLL調試信息?
- 5. 從外部網頁上剝離信息
- 6. CMake的保存剝離調試信息
- 7. 運送產品前剝離最大量的信息
- 8. Elastic Beanstalk剝離Sec-WebSocket-Accept報頭
- 9. mod_rewrite從HTTP頭剝離長值
- 10. 剝離SQL Server中的字符串
- 11. 剝離從CALS
- 12. 剝離的#define
- 13. Joomla剝離#usemap
- 14. XmlNodes剝離HTML
- 15. TinyMCE剝離HTML
- 16. 剝離在Oracle
- 17. 剝離串
- 18. 最後剝離「\」
- 19. Axis2 SOAP信封頭信息
- 20. Kernel32.dll頭信息
- 21. 警告:頭信息
- 22. 卷頁頭信息
- 23. MS域存儲信息
- 24. 剝離高/低ascii
- 25. 剝離URL參數
- 26. 剝離span標籤
- 27. imap_fetchbody和剝離行
- 28. 剝離從列表
- 29. 剝離HTML標籤?
- 30. HtmlDocument.Write剝離引號
不要使用OLE字段,只需使用常規的BLOB。 – 2010-05-20 23:36:44