基于C#实现博客自动生成静态网页
程序基本思路:
本程序由一个模板文件和一个输入文件组成,模板文件含特定代码,所以在程序运行时可以精确地找到插入替换位置,然后读取输入文件,拿到特定的段落,替换之。
思路就是这个样子,应该不是很复杂。目前就是写出来然后节省一部分代码量,该程序还有许多限制,也就在我电脑上跑跑了。
本文就是这个程序跑出来的,然后修改了部分错误,大家感受一下。
此乃初稿,即第一天完成时的代码,后续有所改动和扩展。
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace 博客笔记自动生成 {
class Program {
#region 写入标题,时间,简介
static void r_and_w_title(string file) {
var utf8WithBom = new System.Text.UTF8Encoding(true);
StreamReader reader = new StreamReader(@"D:\Github\jtahstu.github.com\blogs\biji\biji_Template.html", utf8WithBom);
String a = reader.ReadToEnd();
StreamReader reader_input = new StreamReader(@"D:\Github\jtahstu.github.com\blogs\biji\input.txt", utf8WithBom);
string input = reader_input.ReadToEnd();
reader.Close();
reader_input.Close();
//替换标题
int start = input.IndexOf("~t");
int end = input.IndexOf("~t", start + 2);
string s = input.Substring(start + 2, end - start - 2);
string ss = "$title$";
a = a.Replace(ss, s);
//替换时间
//int start2 = input.IndexOf("~d");
//int end2 = input.IndexOf("~d", start2 + 2);
//string s2 = input.Substring(start2 + 2, end2 - start2 - 2);
string s2 = DateTime.Now.ToString();
string ss2 = "$time$";
a = a.Replace(ss2, s2);
//替换简介
int start3 = input.IndexOf("~i");
int end3 = input.IndexOf("~i", start3 + 2);
string s3 = input.Substring(start3 + 2, end3 - start3 - 2);
string ss3 = "$info$";
a = a.Replace(ss3, s3);
//写入文件
string filename = @"D:\Github\jtahstu.github.com\blogs\biji\" + file + ".html";
StreamWriter readTxt = new StreamWriter(filename, false, utf8WithBom);
readTxt.Write(a);
readTxt.Flush();
readTxt.Close();
}
#endregion
#region 写入段落
static void r_and_w_p(string file) {
string filename = @"D:\Github\jtahstu.github.com\blogs\biji\" + file + ".html";
//设置文件编码为utf-8包含BOM
var utf8WithBom = new System.Text.UTF8Encoding(true);
//先读取模板文件
StreamReader reader = new StreamReader(filename, utf8WithBom);
String a = reader.ReadToEnd();
//然后读取输入文件
StreamReader reader_input = new StreamReader(@"D:\Github\jtahstu.github.com\blogs\biji\input.txt", utf8WithBom);
string input = reader_input.ReadToEnd();
int st = input.IndexOf("~n");
int en = input.IndexOf("~n", st + 2);
string stt = input.Substring(st + 2, en - st - 2);
int p_l = int.Parse(stt);
for (int i = 1; i <= p_l; i++) {
string ss = "p" + i.ToString();
int start = input.IndexOf(ss);
int end = input.IndexOf(ss, start + 2);
string s = input.Substring(start + 2, end - start - 2);//获取当前段落要替换的字符串
string sss = "$" + ss + "$";//模板中要替换的段落
a = a.Replace(sss, s);//执行替换操作
}
reader.Close();
reader_input.Close();
//执行删除多余的段落
for (int i = p_l + 1; i <= 30; i++) {
string ss = "< p >$p" + i.ToString() + "$< /p >";
a = a.Replace(ss, "");
}
//替换换行符
a = a.Replace("\\", "< br >");
//写入文件
StreamWriter readTxt = new StreamWriter(filename, false, utf8WithBom);
readTxt.Write(a);
readTxt.Flush();
readTxt.Close();
}
#endregion
#region 主函数
static void Main(string[] args) {
Console.Write("请输入输出文件名:");
string file = Console.ReadLine();
//执行读写操作
r_and_w_title(file);
r_and_w_p(file);
Console.WriteLine("OK!程序执行完毕,请按任意键退出.");
Console.ReadKey();
//File.Copy(@"change.html", @"HTMLPage1.html", true);
}
#endregion
}
}
运行图片:
执行程序

输入文件格式

输出文件效果

