/** * Constructor for an existing Document */ public NPOIFSDocument(DocumentProperty property, NPOIFSFileSystem filesystem) { _property = property; _filesystem = filesystem; if (property.Size < POIFSConstants.BIG_BLOCK_MINIMUM_DOCUMENT_SIZE) { _stream = new NPOIFSStream(_filesystem.GetMiniStore(), property.StartBlock); _block_size = _filesystem.GetMiniStore().GetBlockStoreBlockSize(); } else { _stream = new NPOIFSStream(_filesystem, property.StartBlock); _block_size = _filesystem.GetBlockStoreBlockSize(); } }
public NPOIFSDocument(string name, int size, NPOIFSFileSystem filesystem, POIFSWriterListener Writer) { _filesystem = filesystem; if (size < POIFSConstants.BIG_BLOCK_MINIMUM_DOCUMENT_SIZE) { _stream = new NPOIFSStream(filesystem.GetMiniStore()); _block_size = _filesystem.GetMiniStore().GetBlockStoreBlockSize(); } else { _stream = new NPOIFSStream(filesystem); _block_size = _filesystem.GetBlockStoreBlockSize(); } Stream innerOs = _stream.GetOutputStream(); DocumentOutputStream os = new DocumentOutputStream(innerOs, size); POIFSDocumentPath path = new POIFSDocumentPath(name.Split(new string[] { "\\\\" }, StringSplitOptions.RemoveEmptyEntries)); string docName = path.GetComponent(path.Length - 1); POIFSWriterEvent event1 = new POIFSWriterEvent(os, path, docName, size); Writer.ProcessPOIFSWriterEvent(event1); innerOs.Dispose(); // And build the property for it _property = new DocumentProperty(name, size); _property.StartBlock = (/*setter*/ _stream.GetStartBlock()); }
private int Store(Stream inStream) { int bigBlockSize = POIFSConstants.BIG_BLOCK_MINIMUM_DOCUMENT_SIZE; //BufferedStream bis = new BufferedStream(stream, bigBlockSize + 1); //bis.mark(bigBlockSize); //// Buffer the contents into memory. This is a bit icky... //// TODO Replace with a buffer up to the mini stream size, then streaming write //byte[] contents; //if (stream is MemoryStream) //{ // MemoryStream bais = (MemoryStream)stream; // contents = new byte[bais.Length]; // bais.Read(contents, 0, contents.Length); //} //else //{ // MemoryStream baos = new MemoryStream(); // IOUtils.Copy(stream, baos); // contents = baos.ToArray(); //} // Do we need to store as a mini stream or a full one? if (inStream.Length < bigBlockSize) { _stream = new NPOIFSStream(_filesystem.GetMiniStore()); _block_size = _filesystem.GetMiniStore().GetBlockStoreBlockSize(); } else { _stream = new NPOIFSStream(_filesystem); _block_size = _filesystem.GetBlockStoreBlockSize(); } // start from the beginning //bis.Seek(0, SeekOrigin.Begin); // Store it Stream outStream = _stream.GetOutputStream(); byte[] buf = new byte[1024]; int length = 0; //for (int readBytes; (readBytes = bis.Read(buf, 0, buf.Length)) != 0; length += readBytes) //{ // outStream.Write(buf, 0, readBytes); //} for (int readBytes = 0; ;) { readBytes = inStream.Read(buf, 0, buf.Length); if (readBytes <= 0) { break; } length += readBytes; outStream.Write(buf, 0, readBytes); } outStream.Dispose(); return(length); }