Определить подпоток - PullRequest
       7

Определить подпоток

0 голосов
/ 11 марта 2012

"Формат файла MS-XLS содержит потоки, подпотоки и записи."- Понимание двоичного формата Excel MS-XLS

При заданном потоке файла xls:

FileStream stream = System.IO.File.Open(filePath, FileMode.Open, FileAccess.Read);
var xs = new List<int>();
for(int i = 0; i < stream.Length;i++)
{
 xs.Add(stream.ReadByte());
}

Как мне поступить с обнаружением подпотоков?Обманывает ли имя то, что субпотоки фактически включены в поток в какой-то последовательности?

Ответы [ 2 ]

1 голос
/ 11 марта 2012

XLS (и другие форматы MS Office, выпущенные до Office 2007) - это структурированный файл хранилища, называемый составным двоичным файлом (см. https://en.wikipedia.org/wiki/COM_Structured_Storage). Структурированное хранилище похоже на файловую систему внутри файла, где файлы называются "«Потоки», а каталоги называются «хранилищами». Файл структурированного хранилища имеет единственное корневое «хранилище», которое может содержать потоки и другие хранилища, и, по-видимому, именно там находятся все потоки в файле xls (возможно, поэтому ихдокументация пропускает понятие «хранилища» и ссылается на потоки как «подпотоки»).

Обычно вы обращаетесь к структурированному хранилищу, используя интерфейс IStorage (см. http://msdn.microsoft.com/en-us/library/windows/desktop/aa380015%28v=vs.85%29.aspx),, но это может быть и несамый удобный способ в .NET.

Для доступа к данным в структурированном хранилище в .NET я бы предложил использовать OpenMCDF - http://sourceforge.net/projects/openmcdf/ - но я сам не пробовал, поэтому могуЯ не даю никаких обещаний относительно его качества.

«Записи» не являются частью формата файлов структурированного хранилища, и я думаю,k вам нужно будет самостоятельно разобрать их в потоках.

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

0 голосов
/ 11 марта 2012

«Составной файл OLE: форма структурированного хранилища, как описано в [MS-CFB]. Составной файл позволяет независимым хранилищам и потокам существовать в одном файле». -MS

По сути, этот поток отражает структуру, используемую для хранения файла, и термин "подпоток" должен быть как минимум определен в библиотеке MSDN.

Все файлы могут быть представлены в виде байтовых массивов, считанных из потоков, и структурирование потоков очень распространено. В .NET для сбора этих данных используется файловый поток, который можно использовать с любым файлом, например .xls, .jpg, .doc и т. Д.

...