public static void Convert(String htmlFilename, String mhtFilename) { var objMessage = new Message(); objMessage.CreateMHTMLBody(htmlFilename); var strm = new Stream {Type = StreamTypeEnum.adTypeText, Charset = "US-ASCII"}; strm.Open(); IDataSource dsk = objMessage.DataSource; dsk.SaveToObject(strm, "_Stream"); strm.SaveToFile(mhtFilename, SaveOptionsEnum.adSaveCreateOverWrite); strm.Close(); }
/// <summary> /// Add full contents of a stream into the Zip storage /// </summary> /// <param name="_method">Compression method</param> /// <param name="_filenameInZip">Filename and path as desired in Zip directory</param> /// <param name="_source">Stream object containing the data to store in Zip</param> /// <param name="_modTime">Modification time of the data to store</param> /// <param name="_comment">Comment for stored file</param> public void AddStream(Compression _method, string _filenameInZip, Stream _source, DateTime _modTime, string _comment) { if (Access == FileAccess.Read) throw new InvalidOperationException("Writing is not alowed"); long offset; if (this.Files.Count == 0) offset = 0; else { ZipFileEntry last = this.Files[this.Files.Count - 1]; offset = last.HeaderOffset + last.HeaderSize; } // Prepare the fileinfo ZipFileEntry zfe = new ZipFileEntry(); zfe.Method = _method; zfe.EncodeUTF8 = this.EncodeUTF8; zfe.FilenameInZip = NormalizedFilename(_filenameInZip); zfe.Comment = (_comment == null ? "" : _comment); // Even though we write the header now, it will have to be rewritten, since we don't know compressed size or crc. zfe.Crc32 = 0; // to be updated later zfe.HeaderOffset = (uint)this.ZipFileStream.Position; // offset within file of the start of this local record zfe.ModifyTime = _modTime; // Write local header WriteLocalHeader(ref zfe); zfe.FileOffset = (uint)this.ZipFileStream.Position; // Write file to zip (store) Store(ref zfe, _source); _source.Close(); this.UpdateCrcAndSizes(ref zfe); Files.Add(zfe); }
private static Stream CopyToMemoryStream(Stream s) { var size = 100000; // large heap is more efficient var copyBuff = new byte[size]; int len; var r = new MemoryStream(); while((len = s.Read(copyBuff, 0, size)) > 0) r.Write(copyBuff, 0, len); r.Seek(0, SeekOrigin.Begin); s.Close(); return r; }