C#方法大全
正则表达式
/^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行。
/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个 ID 号码是否由一个 2 位字,一个连字符以及一个 5 位
数字组成。
/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一个 HTML 标记。
string str = "开头需要匹配的字符串([\\S\\s]*?)(结尾需要匹配的字符串)";
Regex re = new Regex(str);
MatchCollection matches = re.Matches(content);
System.Collections.IEnumerator enu = matches.GetEnumerator();
while (enu.MoveNext() && enu.Current != null)
{
}
Match match = (Match)(enu.Current);
string div = match.Value;
Console.Write(match.Value + "\r\n");
WinRAR 命令行
利用 WinRAR 命令行压缩文件或文件夹 2007-11-14 15:07 压缩文件夹
winrar.exe a -ag -k -r -s -ibck c:\bak.rar c:\dat\
压缩多个文件
winrar a -ag -ibck bak.rar filename1 filename2
参数说明
winrar.exe:运行 winrar,
如果 winrar.exe 没在默认路径中则需要指明路径,如 c:\Progra~1\winrar\winrar.exe ...;
a :备份所有文件;
-ag :当创建压缩文件时,以格式“YYYYMMDDHHMMSS”附加当前日期字符串,文件名
bakYYYYMMDDHHMMSS.rar;
-k :锁定压缩文件;
-r:备份目录和子目录;
-s :创建固实压缩文件;
-ibck :后台运行;
c:\bak.rar :备份的路径和基本名称(-ag 参数会自动在 bak 后加上系统当前时间),
也可不用-ag 参数,通过“%date:~0,4%%date:~5,2%%date:~8,2%”取得时间字串,
也可写作 c:\bak.zip;
c:\dat\ :要备份的文件目录。
filename1:要压缩的文件名,可以多个,也可用通配符 file*
用 C#创建 Windows 服务(Windows Services)
http://www.taiwanren.com/blog/article.asp?id=8686
Windows 服务在 Visual Studio 以前的版本中叫 NT 服务,在 VS.net 启用了新的名称。用 Visual
C# 创建 Windows 服务不是一件困难的事,本文就将指导你一步一步创建一个 Windows 服
务并使用它。这个服务在启动和停止时,向一个文本文件中写入一些文字信息。
第一步:创建服务框架
要创建一个新的 Windows 服务,可以从 Visual C# 工程中选取 Windows 服务(Windows
Service)选项,给工程一个新文件名,然后点击 确定。
你可以看到,向导向工程文件中增加 WebService1.cs 类:
如下图来设置属性:
其中各属性的含意是:
ü
ü
ü
ü
OnShutDown 过程
CanStop
ü
ü
ServiceName
Autolog
CanHandlePowerEvent
CanPauseAndContinue
CanShutdown 服务是否在运行它的计算机关闭时收到通知,以便能够调用
是否自动写入系统的日志文件
服务时候接受电源事件
服务是否接受暂停或继续运行的请求
服务是否接受停止运行的请求
服务名
第二步:向服务中增加功能
在 .cs 代码文件中我们可以看到,有两个被忽略的函数 OnStart 和 OnStop。
OnStart 函数在启动服务时执行,OnStop 函数在停止服务时执行。在这里,当启动和停止服
务时,向一个文本文件中写入一些文字信息,代码如下:
protected override void OnStart(string[] args)
{
FileStream fs = new FileStream(@"d:\mcWindowsService.txt"
FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamWriter.WriteLine("mcWindowsService:Service
Started"+DateTime.Now.ToString()+"\n");
, FileMode.OpenOrCreate,
m_streamWriter.Flush();
m_streamWriter.Close();
fs.Close();
}
protected override void OnStop()
{
FileStream fs = new FileStream(@"d:\mcWindowsService.txt"
FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamWriter.WriteLine("
"+DateTime.Now.ToString()+"\n");
m_streamWriter.Flush();
m_streamWriter.Close();
fs.Close();
}
mcWindowsService:
第三步: 将安装程序添加到服务应用程序
, FileMode.OpenOrCreate,
Service
Stopped
Visual Studio.NET 随附有安装组件,可用来安装与服务应用程序相关联的资源。安装组件
在正在安装到的系统上注册一项单个的服务,并使服务控制管理器知道该服务的存在。
要正确安装服务,并不需要在安装程序中进行任何特殊编码。但是,如果需要向安装进程添
加特殊功能,则可能偶尔需要修改安装程序的内容。
将安装程序添加到服务应用程序的步骤是:
1:在解决方案中,访问要向其中添加安装组件的服务的 Design 视图。
2:在属性窗口中,单击添加安装程序链接
这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和
ServiceInstaller,并且服务的属性值被复制到组件。
3:若要确定如何启动服务,请单击 ServiceInstaller 组件并将 StartType 属性设置为适当的
值。
ü
ü
ü
4:将 serviceProcessInstaller 类的 Account 属性改为 LocalSystem
这样,不论是以哪个用户登录的系统,服务总会启动。
第四步:生成服务程序
通过从生成菜单中选择生成来生成项目。
注意 不要通过按 F5 键来运行项目——不能以这种方式运行服务项目。
第五步:安装服务
访问项目中的已编译可执行文件所在的目录。
用项目的输出作为参数,从命令行运行 InstallUtil.exe。在命令行中输入下列代码:
installutil yourproject.exe
卸载服务
用项目的输出作为参数,从命令行运行 InstallUtil.exe。
服务安装后,必须手动启动。
每次计算机重新启动时,服务都会自动启动。
服务无法启动。
Manual
Automatic
Disabled
installutil /u yourproject.exe
至此,整个服务已经编写,编译,安装完成,你可以在控制面板的管理工具的服务中,看到
你编写的服务。
表到树(递归)
无限极分类表结构到树结构
Form
///
/// 无限极分类表结构到树结构
///
///
跟节点
///
数据集
///
主键列名称
///
子键列名称
///
显示列名称
///
子键初始值
public void TableToTree(ref System.Windows.Forms.TreeNode node, System.Data.DataTable
table, string pKeyColumn, string fKeyColumn, string textColumn, string nodeIndex)
{
string filter = fKeyColumn + "=" + nodeIndex;
System.Data.DataRow[] drs = table.Select(filter);
System.Windows.Forms.TreeNode tn;
for (int i = 0; i < drs.Length; i++)
{
System.Data.DataRow dr = (System.Data.DataRow)drs[i];
if (dr[fKeyColumn].ToString().Equals(nodeIndex))
{
tn = new System.Windows.Forms.TreeNode();
tn.Text = dr[textColumn].ToString();
tn.Tag = nodeIndex;
node.Nodes.Add(tn);
TableToTree(ref tn, table, pKeyColumn, fKeyColumn, textColumn,
dr[pKeyColumn].ToString());
}
}
}
Web
#region 无限极分类表结构到树结构
///
/// 无限极分类表结构到树结构
///
///
跟节点
///
数据集
///
主键列名称
///
子键列名称
///
显示列名称
///
子键初始值
public static void TableToTree(ref System.Web.UI.WebControls.TreeNode node,
System.Data.DataTable table, string pKeyColumn, string fKeyColumn, string textColumn, string
nodeIndex)
{
string filter = fKeyColumn + "=" + nodeIndex;
System.Data.DataRow[] drs = table.Select(filter);
System.Web.UI.WebControls.TreeNode tn;
for (int i = 0; i < drs.Length; i++)
{
System.Data.DataRow dr = (System.Data.DataRow)drs[i];
if (dr[fKeyColumn].ToString().Equals(nodeIndex))
{
tn = new System.Web.UI.WebControls.TreeNode();
tn.Text = dr[textColumn].ToString();
tn.Value = dr[pKeyColumn].ToString();
node.ChildNodes.Add(tn);
TableToTree(ref tn, table, pKeyColumn, fKeyColumn, textColumn,
dr[pKeyColumn].ToString());
}
}
}
#endregion
过滤 DataTable 结果集,返回 DataTable
///
/// 过滤DataTable结果集,返回DataTable
///
///
过滤条件(例:id=1)
///
需要过滤的DataTable
///
排序条件(例:id asc)
///
public static DataTable filterDataTable(string filter,DataTable table,string sort)
{
}
DataTable returnTable = new DataTable();
returnTable = table.Clone();//拷贝框架
DataRow[] drs = table.Select(filter,sort);
for (int i = 0; i < dr.length; i++)
{
}
returnTable.ImportRow((DataRow)drs[i]);//拷贝行内容
return returnTable;
闰年判断
///
/// 闰年判断,是返回true
///
///
年份
///
public bool isYear(int iYear)
{
}
return (iYear % 400 == 0 || (iYear % 4 == 0 && iYear % 100 != 0));
字符串充当分隔符
///
/// 字符串充当分隔符,分割字符串
///
///
字符串
///
分割符
///
public static string[] split(string strinput, string sp)
{
string tmp = "";
int strlen = 0, splen = 0;
int found = 0;
string[] rt = null;//返回数组
try
{
//输入判断
if (strinput == null || sp == null || strinput.Length == 0 || sp.Length == 0) return
null;
//初始化一个数组列表(当做动态数组)
System.Collections.ArrayList tmp3 = new ArrayList();
strlen = strinput.Length;//获得输入字符串的长度
splen = sp.Length;//分隔符的长度
for (int i = 0; i < strlen; i++)
{
//查找分隔符
found = strinput.IndexOf(sp, i);
if (found >= 0)
{
tmp = "";
//取分隔符前的字符串
tmp = strinput.Substring(i, found - i);
//添加到数组列表
tmp3.Add(tmp);
i = found + splen - 1;
}
else
{
string tmp2 = "";
//取最后的字符串
tmp2 = strinput.Substring(i);
if (tmp2 != "")
tmp3.Add(tmp2);
break;
}
}
//将动态数组的维数设置成实际存在的元素个数,因为数组列表是以16的倍数递增维数的
tmp3.TrimToSize();
//转换数组列表为字符串数组,并返回。
rt = (string[])tmp3.ToArray(typeof(String));
tmp3.Clear();
}
catch (Exception e)
{
}
//Console.WriteLine("{0}", e.Message);
throw e;
return rt;
}
替换字符串中的连续空格为 1 个空格
///
/// 替换字符串中的连续空格为1个空格
///
///
字符串
///
public static string replaceBlank(string str)
{
//除去字符串开始部分的连续空格
while (str.StartsWith(" "))
{
}
str = str.Remove(0, 1);
//除去字符串结尾部分的连续空格
while (str.EndsWith(" "))
{
}
str = str.Remove(str.Length-1);
//除去字符串中间部分的连续空格
string[] strs = str.Split(' ');
string newStr = "";
for (int j = 0; j < strs.Length; j++)
{
}
if (!strs[j].Equals(""))
{
}
newStr += strs[j] + " ";
//去除最后一个空格
newStr = newStr.Remove(newStr.Length - 1);
return newStr;
}
字符串转换 XML
using
System;
using
System.IO;
using
System.Xml;
public
class
Sample
{