private void SaveFictionBook(string directory, string filename, FictionBook fictionBook, Encoding encoding) { string outputFilename = String.Empty; XmlDocument document = fictionBook.Document; if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } try { if (this.options.compress) { outputFilename = GetOutputFileName(directory, filename, ".zip"); using (MemoryStream memoryStream = new MemoryStream()) { using (Fb2TextWriter writer = new Fb2TextWriter(memoryStream, encoding)) { writer.IndentHeader = this.options.indentHeader; writer.IndentBody = this.options.indentBody; writer.WriteStartDocument(); document.WriteTo(writer); writer.Flush(); memoryStream.Capacity = (int) memoryStream.Length; memoryStream.Seek(0, SeekOrigin.Begin); using (ZipFile file = ZipFile.Create(outputFilename)) { file.UseZip64 = UseZip64.Off; ZipEntry entry = file.EntryFactory.MakeFileEntry(filename + ".fb2", false); entry.DateTime = fictionBook.ContainerDateTime; file.BeginUpdate(); file.Add(new StreamDataSource(memoryStream), entry); file.CommitUpdate(); } } } } else { outputFilename = GetOutputFileName(directory, filename, ".fb2"); using (Fb2TextWriter writer = new Fb2TextWriter(outputFilename, encoding)) { writer.IndentHeader = this.options.indentHeader; writer.IndentBody = this.options.indentBody; writer.WriteStartDocument(); document.WriteTo(writer); writer.Flush(); } } if(!String.IsNullOrEmpty(outputFilename)) { DateTime dt = fictionBook.ContainerDateTime; if (!dt.IsDaylightSavingTime()) { dt = dt.AddHours(-1); } File.SetCreationTime(outputFilename, dt); File.SetLastAccessTime(outputFilename, dt); File.SetLastWriteTime(outputFilename, dt); } } catch (Exception) { if(!String.IsNullOrEmpty(outputFilename)) { if(File.Exists(outputFilename)) { try { File.Delete(outputFilename); } catch (Exception exp) { Logger.WriteLine(TraceEventType.Verbose, exp); } } } throw; } }
private void SaveFictionBook(string directory, string filename, FictionBook fictionBook, Encoding encoding) { string outputFilename = String.Empty; XmlDocument document = fictionBook.Document; if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } try { outputFilename = GetOutputFileName(directory, filename, ".fb2"); using (Fb2TextWriter writer = new Fb2TextWriter(outputFilename, encoding)) { writer.WriteStartDocument(); document.WriteTo(writer); writer.Flush(); } if (!String.IsNullOrEmpty(outputFilename)) { DateTime dt = fictionBook.ContainerDateTime; if (!dt.IsDaylightSavingTime()) { dt = dt.AddHours(-1); } File.SetCreationTime(outputFilename, dt); File.SetLastAccessTime(outputFilename, dt); File.SetLastWriteTime(outputFilename, dt); } } catch (Exception) { if (!String.IsNullOrEmpty(outputFilename)) { if (File.Exists(outputFilename)) { try { File.Delete(outputFilename); } catch (Exception exp) { ApplicationLogger.WriteStringToLog(exp.Message); } } } throw; } }