C#编写的Unicode文本空行去除器
网页保存文本时,往往会出现很多空行,对于编程及其它应用都很不方便,使用Word把原有格式都继承了,用其他编辑工具命令又太多,因此编写了这样一个文本空行去除器。可以缩小到托盘图标,使用起来很方便。
注意:文本文件首先必须是Unicode格式的。
*------------------------------------------------
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reflection;
using System.Data;
using System.IO;
using System.Text;
namespace RMBlankLine
{
/// Form1 的摘要说明。
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private Icon mNetTrayIcon = new Icon("Tray.ico");
private NotifyIcon TrayIcon;
private ContextMenu notifyiconMnu;
/// 必需的设计器变量。
private System.ComponentModel.Container components = null;
public Form1()
{
// Windows 窗体设计器支持所必需的
InitializeComponent();
//初始化托盘程序的各个要素
Initializenotifyicon();
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
}
private void Initializenotifyicon()
{
//设定托盘程序的各个属性
TrayIcon = new NotifyIcon();
TrayIcon.Icon = mNetTrayIcon;
TrayIcon.Text = "文本空行去除器" + "\n" + "Mossan 2004-2006";
TrayIcon.Visible = true;
TrayIcon.DoubleClick += new System.EventHandler(this.TrayIcon_DoubleClick);
//定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象
MenuItem[] mnuItms = new MenuItem[4];
mnuItms[0] = new MenuItem();
mnuItms[0].Text = "打开(&O)";
mnuItms[0].Click += new System.EventHandler(this.openwindow);
mnuItms[0].DefaultItem = true;
mnuItms[1] = new MenuItem();
mnuItms[1].Text = "关于(&A)";
mnuItms[1].Click += new System.EventHandler(this.showmessage);
mnuItms[2] = new MenuItem("-");
mnuItms[3] = new MenuItem();
mnuItms[3].Text = "退出(&C)";
mnuItms[3].Click += new System.EventHandler(this.ExitSelect);
notifyiconMnu = new ContextMenu(mnuItms);
TrayIcon.ContextMenu = notifyiconMnu;
//为托盘程序加入设定好的ContextMenu对象
}
private void TrayIcon_DoubleClick(object Sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
this.Activate();
}
else
{
this.WindowState = FormWindowState.Minimized;
this.Hide();
}
}
public void openwindow(object sender, System.EventArgs e)
{
this.Visible = true;
if (this.WindowState == FormWindowState.Minimized)
this.WindowState = FormWindowState.Normal;
this.Activate();
}
public void showmessage(object sender, System.EventArgs e)
{
MessageBox.Show("双 击 主 窗 口 最 小 化" + "\n\n" + "http://mossan.cnblogs.com");
}
public void ExitSelect(object sender, System.EventArgs e)
{
//隐藏托盘程序中的图标
TrayIcon.Visible = false;
//关闭系统
this.Close();
}
private void Form1_DoubleClick(object sender, System.EventArgs e)
{
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
this.Hide();
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
// button1
this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.button1.Location = new System.Drawing.Point(116, 38);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(64, 24);
this.button1.TabIndex = 0;
this.button1.Text = "浏览(&B)";
this.button1.Click += new System.EventHandler(this.button1_Click);
// Form1
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 103);
this.ControlBox = false;
this.Controls.Add(this.button1);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form1";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "UniCode文本空行去除器";
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
this.DoubleClick += new System.EventHandler(this.Form1_DoubleClick);
this.ResumeLayout(false);
}
#endregion
/// 应用程序的主入口点。
[STAThread]
static void Main()
{
//得到正在运行的例程
Process instance = RunningInstance();
if (instance == null)
{
//如果没有其它例程,就新建一个窗体
Application.Run(new Form1());
}
else
{
//处理发现的例程
HandleRunningInstance(instance);
}
}
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
//遍历正在有相同名字运行的例程
foreach (Process process in processes)
{
//忽略现有的例程
if (process.Id != current.Id)
{
//确保例程从EXE文件运行
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") ==current.MainModule.FileName)
{
//返回另一个例程实例
return process;
}
}
}
//没有其它的例程,返回Null
return null;
}
public static void HandleRunningInstance(Process instance)
{
//确保窗口没有被最小化或最大化
ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL);
//设置真实例程为foreground window
SetForegroundWindow(instance.MainWindowHandle);
}
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;
private void button1_Click(object sender, System.EventArgs e)
{
// 打开目录对话框,选中文本文件
OpenFileDialog fdlg = new OpenFileDialog();
fdlg.Title = "选择文本文件";
// 文件过滤类型
fdlg.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
// 缺省过滤文件类型
fdlg.FilterIndex = 1;
if (fdlg.ShowDialog() == DialogResult.OK)
{
string Path = fdlg.FileName;
int n = Path.LastIndexOf('\\');
string Dir = Path.Substring(0, n);
string Name = Path.Substring(n + 1, Path.Length - n - 1);
StreamReader reader = null;
StreamWriter writer = null;
Encoding unicode = Encoding.Unicode;
try
{
reader = new StreamReader(Path);
writer = new StreamWriter("new_" + Name, false, unicode);
string line = reader.ReadLine();
while (line != null)
{
if (line.Trim().Length > 0)
{
writer.WriteLine(line);
}
line = reader.ReadLine();
}
MessageBox.Show("转换成功!");
}
catch
{
MessageBox.Show("意外中断!");
return;
}
finally
{
if (reader != null)
{
reader.Close();
}
if (writer != null)
{
writer.Close();
}
}
}
}
}
}