private void DatOut(DatOut datout, FileInfo fi)
 {
     using (Stream stream = fi.OpenRead())
     using (StreamReader reader = new StreamReader(stream, MiscWritePlugin.encShiftJis)) {
         StringBuilder sb = new StringBuilder("<dd>");
         string line;
         while (null != (line = reader.ReadLine())) {
             sb.Append(HttpUtility.HtmlEncode(line));
             sb.Append("<br>");
         }
         sb.Append("</dd>");
         datout.WriteHTML(sb.ToString());
     }
 }
 private void FindAndWriteDrafts(JaneScript js, DatOut datout, bool readDraftContents)
 {
     datout.WriteText("草稿を検索しています。");
     datout.WriteBR();
     datout.WriteHTML("<hr>");
     using (CategoryList cl = js.CategoryList())
     using (DisposableList<Category> categories = new DisposableList<Category>(cl)) {
         foreach (Category category in categories) {
             DirectoryInfo diCate = new DirectoryInfo(category.LogDir);
             if (!diCate.Exists) continue;
             using (DisposableList<Board> boards = new DisposableList<Board>(category)) {
                 foreach(Board board in boards){
                     board.Load();
                     // カテゴリディレクトリの草稿を探す
                     FileInfo fi = new FileInfo(Path.Combine(category.LogDir, board.Name + "NewThread.mns"));
                     if (fi.Exists) this.OutDraft(datout, category, board, fi, readDraftContents);
                     // 板ディレクトリ内を探す
                     DirectoryInfo di = new DirectoryInfo(board.LogDir);
                     if (!di.Exists) continue;
                     foreach (FileInfo fi2 in di.GetFiles("*.mns")) {
                         if (fi2.Name == "NewThread.mns") {
                             this.OutDraft(datout, category, board, fi2, readDraftContents);
                         } else {
                             using (ThreadItem thread = board.FindThread(Path.GetFileNameWithoutExtension(fi2.Name))) {
                                 this.OutDraft(datout, category, board, thread, fi2, readDraftContents);
                             }
                         }
                     }
                     js.ProcessMessages();
                 }
             }
             js.ProcessMessages();
         }
     }
     datout.WriteBR();
     datout.WriteHTML("<hr>");
     datout.WriteText("検索が終了しました。");
 }
 private void OutDraft(DatOut datout, Category category, Board board, ThreadItem thread, FileInfo fi, bool readDraftContents)
 {
     datout.WriteHTML(string.Format("<dt>{0} [<a href=\"{1}\">{2}</a>] <a href=\"{3}\">{4}</a></dt>",
         HttpUtility.HtmlEncode(category.Name),
         board.Url.AbsoluteUri,
         HttpUtility.HtmlEncode(board.Name),
         thread.URL.AbsoluteUri,
         HttpUtility.HtmlEncode(thread.Title)));
     if (readDraftContents) {
         this.DatOut(datout, fi);
     }
     datout.WriteBR();
 }