/// <summary> /// スレッドをhtml形式で保存 /// </summary> /// <param name="cache">キャッシュ情報</param> /// <param name="header">保存するスレッド</param> /// <param name="filePath">保存先ファイルパス</param> public static void SaveHtml(Cache cache, ThreadHeader header, string filePath, ThreadSkinBase skin) { if (filePath == null) { throw new ArgumentNullException("filePath"); } if (cache == null) { throw new ArgumentNullException("cache"); } if (header == null) { throw new ArgumentNullException("header"); } // datの存在するパスを取得 string fromPath = cache.GetDatPath(header); ThreadStorage reader = null; StreamWriter writer = null; try { // 読み込みストリームを開く reader = new LocalThreadStorage(cache, header, StorageMode.Read); // 書き込みストリームを開く writer = new StreamWriter(filePath, false, TwinDll.DefaultEncoding); ResSetCollection items = new ResSetCollection(); if (skin == null) { skin = new HtmlSkin(); } // ヘッダを書き込む writer.WriteLine(skin.GetHeader(header)); // 本文を書き込む while (reader.Read(items) != 0) { ; } writer.WriteLine(skin.Convert(items)); // フッタを書き込む writer.WriteLine(skin.GetFooter(header)); } finally { if (reader != null) { reader.Close(); } if (writer != null) { writer.Close(); } } }
/// <summary> /// レスをあぼーん /// </summary> /// <param name="header">あぼーんするスレッド情報</param> /// <param name="indices">あぼーんするレス番号の配列</param> /// <param name="visible">透明あぼーんの場合はfalse、そうでない場合はtrue</param> public virtual void ResABone(ThreadHeader header, int[] indices, bool visible) { if (header == null) { throw new ArgumentNullException("header"); } if (indices == null) { throw new ArgumentNullException("indices"); } ResSetCollection resSets = new ResSetCollection(); ThreadStorage storage = null; try { storage = new LocalThreadStorage(this); // スレッドを読み込む if (storage.Open(header, StorageMode.Read)) { while (storage.Read(resSets) != 0) { ; } storage.Close(); } // レスの削除 foreach (int index in indices) { resSets.ABone(index, visible, visible ? ABoneType.Normal : ABoneType.Tomei, ""); } // ログを一端削除 string dat = GetDatPath(header); File.Delete(dat); // 書き込む if (storage.Open(header, StorageMode.Write)) { storage.Write(resSets); storage.Close(); } storage = null; } finally { if (storage != null) { storage.Close(); } } }
/// <summary> /// スレッドをdat形式で保存 /// </summary> /// <param name="cache">キャッシュ情報</param> /// <param name="header">保存するスレッド</param> /// <param name="filePath">保存先ファイルパス</param> public static void SaveDat(Cache cache, ThreadHeader header, string filePath) { if (cache == null) { throw new ArgumentNullException("cache"); } if (header == null) { throw new ArgumentNullException("header"); } if (filePath == null) { throw new ArgumentNullException("filePath"); } // datの存在するパスを取得 string fromPath = cache.GetDatPath(header); ThreadStorage reader = null; StreamWriter writer = null; ResSetCollection items = new ResSetCollection(); X2chThreadFormatter formatter = new X2chThreadFormatter(); try { // 読み込みストリームを開く reader = new LocalThreadStorage(cache, header, StorageMode.Read); // 書き込みストリームを開く writer = new StreamWriter(filePath, false, Encoding.GetEncoding("Shift_Jis")); // すべて読み込む while (reader.Read(items) != 0) { ; } writer.Write(formatter.Format(items)); } finally { if (reader != null) { reader.Close(); } if (writer != null) { writer.Close(); } } }
/// <summary> /// スレッドをmonalog形式で保存 /// </summary> /// <param name="cache">キャッシュ情報</param> /// <param name="header">保存するスレッド</param> /// <param name="filePath">保存先ファイルパス</param> public static void SaveMonalog(Cache cache, ThreadHeader header, string filePath) { if (filePath == null) { throw new ArgumentNullException("filePath"); } if (cache == null) { throw new ArgumentNullException("cache"); } if (header == null) { throw new ArgumentNullException("header"); } // datの存在するパスを取得 string fromPath = cache.GetDatPath(header); MonalogConverter conv = new MonalogConverter(); ThreadStorage reader = null; ResSetCollection items = new ResSetCollection(); try { reader = new LocalThreadStorage(cache, header, StorageMode.Read); while (reader.Read(items) != 0) { ; } conv.Write(filePath, header, items); } finally { if (reader != null) { reader.Close(); } } }