public Stream CreateFile(string file, CompressionHint hint, DateTime lastWrite) { if (string.IsNullOrEmpty(file)) { throw new ArgumentNullException(nameof(file)); } if (m_writer == null) { throw new InvalidOperationException(Strings.SevenZipCompression.NoWriterError); } var entry = new WriterEntry(file, lastWrite); if (hint != CompressionHint.Noncompressible) { if (m_lzma2Encoder == null) { if (m_lowOverheadMode) { m_lzma2Encoder = new ManagedLzma.LZMA.Master.SevenZip.ArchiveWriter.LzmaEncoder(); } else { m_lzma2Encoder = new ManagedLzma.LZMA.Master.SevenZip.ArchiveWriter.Lzma2Encoder(m_threadCount, m_encoderProps); } m_lzma2Encoder.OnOutputThresholdReached += mLzma2Encoder_OnOutputThresholdReached; m_lzma2Encoder.SetOutputThreshold(kStreamThreshold); } return(m_lzma2Encoder.BeginWriteFile(entry)); } else { if (m_copyEncoder == null) { m_copyEncoder = new ManagedLzma.LZMA.Master.SevenZip.ArchiveWriter.PlainEncoder(); } if (m_lzma2Encoder != null && m_lzma2Encoder == m_writer.CurrentEncoder) { m_lzma2Encoder.SetOutputThreshold(kStreamThreshold); // rearm threshold so we can switch back } if (m_writer.CurrentEncoder != m_copyEncoder) { m_writer.ConnectEncoder(m_copyEncoder); } return(m_copyEncoder.BeginWriteFile(entry)); } }
public void Dispose() { if (m_archive != null) { m_archive = null; } if (m_reader != null) { try { m_reader.Close(); } finally { m_reader = null; } } if (m_writer != null) { try { if (m_copyEncoder != null) { try { m_writer.ConnectEncoder(m_copyEncoder); m_copyEncoder.Dispose(); } finally { m_copyEncoder = null; } } if (m_lzma2Encoder != null) { try { m_writer.ConnectEncoder(m_lzma2Encoder); m_lzma2Encoder.Dispose(); } finally { m_lzma2Encoder = null; } } m_writer.WriteFinalHeader(); } finally { m_writer = null; } } if (m_stream != null) { try { m_stream.Dispose(); } finally { m_stream = null; } } }
public void Dispose() { if(m_archive != null) m_archive = null; if(m_reader != null) try { m_reader.Close(); } finally { m_reader = null; } if(m_writer != null) { try { if(m_copyEncoder != null) try { m_writer.ConnectEncoder(m_copyEncoder); m_copyEncoder.Dispose(); } finally { m_copyEncoder = null; } if(m_lzma2Encoder != null) try { m_writer.ConnectEncoder(m_lzma2Encoder); m_lzma2Encoder.Dispose(); } finally { m_lzma2Encoder = null; } m_writer.WriteFinalHeader(); } finally { m_writer = null; } } if(m_file != null) try { m_file.Dispose(); } finally { m_file = null; } }
public Stream CreateFile(string file, CompressionHint hint, DateTime lastWrite) { if(string.IsNullOrEmpty(file)) throw new ArgumentNullException("file"); if(m_writer == null) throw new InvalidOperationException(Strings.SevenZipCompression.NoWriterError); var entry = new WriterEntry(file, lastWrite); if(hint != CompressionHint.Noncompressible) { if(m_lzma2Encoder == null) { if(m_lowOverheadMode) m_lzma2Encoder = new ManagedLzma.LZMA.Master.SevenZip.ArchiveWriter.LzmaEncoder(); else m_lzma2Encoder = new ManagedLzma.LZMA.Master.SevenZip.ArchiveWriter.Lzma2Encoder(m_threadCount); m_lzma2Encoder.OnOutputThresholdReached += mLzma2Encoder_OnOutputThresholdReached; m_lzma2Encoder.SetOutputThreshold(kStreamThreshold); } return m_lzma2Encoder.BeginWriteFile(entry); } else { if(m_copyEncoder == null) m_copyEncoder = new ManagedLzma.LZMA.Master.SevenZip.ArchiveWriter.PlainEncoder(); if(m_lzma2Encoder != null && m_lzma2Encoder == m_writer.CurrentEncoder) m_lzma2Encoder.SetOutputThreshold(kStreamThreshold); // rearm threshold so we can switch back if(m_writer.CurrentEncoder != m_copyEncoder) m_writer.ConnectEncoder(m_copyEncoder); return m_copyEncoder.BeginWriteFile(entry); } }