收藏 分享(赏)

C#方法大全.doc

上传人:tangtianxu1 文档编号:2956258 上传时间:2018-09-30 格式:DOC 页数:155 大小:1.41MB
下载 相关 举报
C#方法大全.doc_第1页
第1页 / 共155页
C#方法大全.doc_第2页
第2页 / 共155页
C#方法大全.doc_第3页
第3页 / 共155页
C#方法大全.doc_第4页
第4页 / 共155页
C#方法大全.doc_第5页
第5页 / 共155页
点击查看更多>>
资源描述

1、C#方法大全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:Progra1winrarwinrar.exe .;a :备份所有文件;-ag :当创建压缩文件时,以格式“YYYYMMDDHHMMSS”附加当前日期字符串,文件名

2、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*获取 Excel.dllExcel 低版本1.要保证机器本身要安装 OFFICE.2.把C:Program FilesMicro

3、soft OfficeOffice:默认安装路径下的 EXCEL9.OLB 文件拷贝到C:Visual Studio.NetSDKv1.1Bin:VS.Net 安装路径 路径下。3.打开 Visual Studio .Net2003 命令提示,运行 TlbImp Excel9.olb Excel.dll ,就会在C:Visual Studio.NetSDKv1.1Bin下生成 Excel.dll 组件。4.在项目中添加 Excel.dll 引用就 OK 了。Excel2003 生成 Excel.dll 的方法为了在 VS2005 中,对 Excel 文件进行操作,需要用到 Excel.dll,

4、方法是将 Office 目录下的Excel.exe 文件拷出来, 把 Excel.exe 文件考到 C:Program FilesMicrosoft Visual Studio 8SDKv2.0Bin 里然后运行 VS2005 命令提示输入 TlbImp EXCEL.EXE Excel.dll 然后会在 C:Program FilesMicrosoft Visual Studio 8VC 下找到 Excel.dllMail 邮件操作c#socket 发送邮件详解邮件发送在 web 应用中是屡见不鲜的,在 asp 时代大家多是利用一些第三方提供的组件如JMAIL、ASPMAIL 等进行邮件发送。

5、自从微软推出 A 后,很多程序员开始转向采用C#作为主要的开发语言。 提供了更加强大的功能,同时也提供给了大家一个 SMTP类作为邮件发送之用。但是,随着垃圾邮件的广泛传播,很多邮件服务提供商纷纷增加了SMTP 的认证手续,也就是 ESMTP,而微软提供的 SMTP 类居然不支持认证发送。当然现在网上也出现了一些解决方案,利用其他的一些手段来发出认证信息。但我想,是不是还有更好的呢?为了解决这个问题,笔者两日茶饭不思,日以继夜,终于找到了一个方法:) 。下面,我们将利用 TCPCLIENT 这个类直接与 SMTP 服务器通讯进行邮件的发送。 实际上原理也就是利用套接字(Socket)和服务器进

6、行对话通讯,按照 SMTP 协议的规范,和服务器建立联系。我们以往用的一些邮件组件都是这么做的。 在开始之前,我们要对 SMTP 协议及其扩展 ESMTP 有个初步的了解。 SMTP 和 ESMTP 的一些主要命令格式有以下一些: HELO 例如:HELO Localhost 这相当于和服务器打个招呼,你好,我是某某 EHLO 例如:EHLO Localhost 这是针对 ESMTP 服务器的接触方式,必须输入这个命令,系统才会开始认证程序 AUTH LOGIN 输入这个命令,系统的认证程序将会启动,同时系统会返回一个经过 Base64 处理过的字符串,意思是“请输入用户名” 。接着必须发送用

7、户名给服务器,用户名也必须经过 Base64编码转换,服务器在通过用户名的认证之后会要求输入密码,此时输入经过 Base64 编码转换后的密码。成功后,即可运行下面的命令了。 MAIL FROM: 例如:MAIL FROM: 这是告诉服务器发件人的邮件地址 RCPT TO: 例如:RCPT TO: 这是告诉服务器收件人的邮件地址 DATA 输入这个命令后,服务器正式开始接受数据 . 数据输入完成后,必须输入命令“.” ,服务器就会停止数据的接受. QUIT 退出系统 上面是一些基本命令的描述,如果大家还有什么不懂的地方,可以参考 TCP/IP 有关的书籍,也可以到这个网站看看 RFC 文档

8、:http:/210.25.132.18/rfc/index.html 现在我们正式开始,看看在 C# 中如何来进行工作。 第一步:创建一个类命名为 MailSend,这个类继承 System.Net.Sockets.TcpClient using System;using System.Net.Sockets;/用于处理网络连接 using System.IO; /用于处理附件的包 using System.Text;/用于处理文本编码 using System.Data; using System.Net; public class MailSend:TcpClient public Ma

9、ilSend() 在这里我要讲讲 TcpClient 这个类,它的主要作用就是为 TCP 网络服务提供客户端的连接,大家可以看到,他来源于 Sockets 这个包,实际上是基于 Socket 类构建。不过他以更高的抽象程度提供 TCP 服务,操作起来也更简单。 第二步:建立一些基本的变量及连接方法 1、基本变量private String server;/SMTP 服务器域名 private int port;/端口 private String username;/用户名 private String password;/密码 private String subject;/主题 priva

10、te String body;/文本内容 private String htmlbody;/超文本内容 private String from;/发件人地址 private String to;/收件人地址 private String fromname;/发件人姓名 private String toname;/收件人姓名 private String content_type;/邮件类型 private String encode;/邮件编码 private String charset;/语言编码 private DataTable filelist;/附件列表 private int

11、priority;/邮件优先级 以上定义的都是邮件发送所需的一些基本信息,可以将上述变量做为属性来传递。 如: public String SMTPServer setthis.server=value; 其余的也可如此. 2、向服务器写入命令的方法变量 strCmd 为需要输入的命令或数据的字符串 变量 charset 为数据的字符语言编码,一般可以设置为 GB2312 private void WriteStream(String strCmd,String charset) Stream TcpStream;/定义操作对象 strCmd = strCmd + “rn“; /加入换行符 T

12、cpStream =this.GetStream();/获取数据流 /将命令行转化为 byte byte bWrite = Encoding.GetEncoding(charset).GetBytes(strCmd.ToCharArray(); /由于每次写入的数据大小是有限制的,那么我们将每次写入的数据长度定在个字节,一旦命令长度超过了,就分步写入。 int start=0; int length=bWrite.Length; int page=0; int size=75; int count=size; if (length75) /数据分页 if(length/size)*size0)

13、 sp=Encoding.Default.GetString(by);/转化为 String return sp; 除了输入 DATA 命令之后,其余的时间向服务器发送命令,服务器都会返回一些信息,并同时有一个状态码返回,告诉你操作是否成功完成了。一旦输入 DATA 命令,也就是数据开始传递的这段时间中,服务器不会返回任何信息,直到输入“.”结束传递,服务器才会返回信息。 4、发出命令并判断返回信息是否正确,也就是看发出的命令服务器是否接受并通过了。本方法实际上将上面的两个方法结合来用,一个写,一个收,然后进行判断,看是否正确。这样我们就能够监控每步操作是否正常进行了。 参数 strCmd 也

14、就是需要输入的命令或者数据 参数 state 为返回的表明操作成功的状态码 private bool OperaStream(string strCmd,string state) string sp=null; bool success=false; try WriteStream(strCmd);/写入命令 sp = ReceiveStream();/接受返回信息 if (sp.IndexOf(state)!=-1)/判断状态码是否正确 success=true; catch(Exception ex) Console.Write(ex.ToString(); return success

15、; 我们进行每一步操作时,都是通过状态码来确定是否成功的,那么如果操作成功,就会返回正确的状态码,根据这个原理,我们在这个方法中,同时输入命令和表明操作成功的状态码,通过获取的数据判断返回的是不是正确的状态码,以此来决定是否继续进行下一步操作。 在这里我要告诉大家一些基本的状态码表示的含义。 211 帮助返回系统状态 214 帮助信息 220 服务准备就绪 221 关闭连接 250 请求操作就绪 251 用户不在本地,转寄到 354 开始邮件输入 421 服务不可用 450 操作未执行,邮箱忙 451 操作中止,本地错误 452 操作未执行,存储空间不足 500 命令不可识别或语法错 501

16、参数语法错 502 命令不支持 503 命令顺序错 504 命令参数不支持 550 操作未执行,邮箱不可用 551 非本地用户 552 中止,存储空间不足 553 操作未执行,邮箱名不正确 554 传输失败 写完以上的基本方法,我们可以开始和服务器进行连接了。由于现在的服务器有 SMTP 和ESMTP 两种,不同的服务器连接的命令格式不一样,那么我们需要完成一个方法来取得服务器的连接。 public bool getMailServer() try /域名解析 System.Net.IPAddress ipaddress=(IPAddress)System.Net.Dns.Resolve(th

17、is.server).AddressList.GetValue(0); System.Net.IPEndPoint endpoint=new IPEndPoint(ipaddress,25); Connect(endpoint);/连接 Smtp 服务器 ReceiveStream();/获取连接信息 if (this.username!=null) /开始进行服务器认证 /如果状态码是 250 则表示操作成功 if (!OperaStream(“EHLO Localhost“,“250“) this.Close(); return false; if (!OperaStream(“AUTH

18、LOGIN“,“334“) this.Close(); return false; username=AuthStream(username);/此处将 username 转换为 Base64 码 if (!OperaStream(this.username,“334“) this.Close(); return false; password=AuthStream(password);/此处将 password 转换为 Base64 码 if(!OperaStream(this.password,“235“) this.Close(); return false; return true;

19、else /如果服务器不需要认证 if (OperaStream(“HELO Localhost“,“250“) return true;elsereturn false; catch(Exception ex)return false;上面这个方法主要是用于和服务器取得联系,其中包含了针对两种不同服务器的连接方法,如果用户名不为空,那么我们首先进行 ESMTP 的连接,否则我private string AuthStream(String strCmd)try byte by=Encoding.Default.GetBytes(strCmd.ToCharArray();strCmd=Conv

20、ert.ToBase64String(by);catch(Exception ex)return ex.ToString();return strCmd; 上面的方法将数据转化为 Base64 编码字符串,大家如果觉得太抽象了,可以这样试一试,在 CMD 模式输入 telnet 25 然后回车,就可以连接 sohu 的 SMTP 服务器,sohu 的 SMTP 服务器采用 ESMTP 协议,必须认证,大家可以试着操作一下。第三步:关于邮件的附件传递大家有发送邮件时,有时候会包含一些附件,那么本组件也考虑到了这一点。下面我们将会详细讲述如何对附件进行处理filelist=new DataTab

21、le();/已定义变量,初始化操作filelist.Columns.Add(new DataColumn(“filename“,typeof(string);/文件名filelist.Columns.Add(new DataColumn(“filecontent“,typeof(string);/文件内容public void LoadAttFile(String path)/根据路径读出文件流FileStream fstr=new FileStream(path,FileMode.Open);/建立文件流对象byte by=new byteConvert.ToInt32(fstr.Lengt

22、h);fstr.Read(by,0,by.Length);/读取文件内容fstr.Close();/关闭/格式转换String fileinfo=Convert.ToBase64String(by);/转化为 base64 编码/增加到文件表中DataRow dr=filelist.NewRow();dr0=Path.GetFileName(path);/获取文件名dr1=fileinfo;/文件内容filelist.Rows.Add(dr);/增加通过这个方法将直接读取出文件的内容信息,然后存储在 DataTable 对象中,理论上可以读取无数个文件,当然,文件越大,发送时间也就越长。这个方

23、法只是针对本地的附件加入,如果大家有兴趣,可以自己利用 HttpRequest 做一个网上文件抓取的程序,直接抓取网上的文件,不过一般来说,这种方法很少用得到。好了,闲话不谈,我们已经将文件读入,那么之后如何处理呢?请看下面的一个方法。:private void Attachment(): /对文件列表做循环: for (int i=0;i“image/gif“.gz“ -“application/x-gzip“.htm“ -“text/html“.html“ -“text/html“.jpg“ -“image/jpeg“.tar“ -“application/x-tar“.txt“ -“te

24、xt/plain“.zip“ -“application/zip“我比较偷懒,如果有需要的朋友,可以补上一些判断,获取文件的原本格式。第四步:关于邮件的头信息前面讲了这么多,就像是吃大餐之前的甜点,现在我们要进入最重要的部份-邮件的头信息,实际上,这个东西我们见得非常的多,大家在收发邮件的时候,查看邮件的属性就会看见一大串代码,里面有一些邮件地址,IP 地址什么的,这就是邮件的头信息。那么头信息的基本内容现在开讲:FROM: 格式:FROM:管理员SUBJECT: 格式:SUBJECT:今天的天气很不错!DATE: 格式:DATE: Thu, 29 Aug 2002 09:52:47 +080

25、0 (CST)REPLY-TO: 格式:REPLY-TO:Content-Type: 格式:Content-Type: multipart/mixed; boundary=unique-boundary-1X-Priority: 格式:X-Priority:3MIME-Version: 格式: MIME-Version:1.0Content-Transfer-Encoding: 格式:Content-Transfer-Encoding:Base64X-Mailer: 格式:X-Mailer:FoxMail 4.0 beta 1 cn如果大家安装了 OutLook(一般都装了:) ) ,自己给自

26、己发一封信,收下来后,查看邮件的属性,然后会看到包含上面一些信息的数据,大家可以根据 Outlook 的头信息为参照。在这里,我重点要讲的是 Content-Type 这个头信息,实际上我们在邮件发送时常常包含了文本内容,Html 超文本内容以及附件内容,那么此时邮件的格式也就是 multipart/mixed,但是这么多内容你要是全放在一块,服务器是不会认识的,那么需要在不同的内容之间加入分隔符,一部分内容完了之后再加入一个结束分隔符,有点像 Html。在 Content-Type 的例子中有一句话 boundary=unique-boundary-1,这里就告诉系统我的分隔符叫什么名字。那

27、么在一个邮件中,可以有多个分隔符,其余的分隔符实际上是在你给出的第一个分隔符下扩展的。说了这么多,看看程序:WriteStream(“Date: “+DateTime.Now);/时间WriteStream(“From: “+this.fromname+“);/发件人WriteStream(“Subject: “+this.subject);/主题WriteStream(“To:“+this.to);/收件人/邮件格式WriteStream(“Content-Type: multipart/mixed; boundary=“unique-boundary-1“);WriteStream(“Re

28、ply-To:“+this.from);/回复地址WriteStream(“X-Priority:“+priority);/优先级WriteStream(“MIME-Version:1.0“);/MIME 版本/数据 ID,随意WriteStream(“Message-Id: “);WriteStream(“Content-Transfer-Encoding:“+this.encode);/内容编码WriteStream(“X-Mailer:DS Mail Sender V1.0“);/邮件发送者WriteStream(“);看看这段头信息,里面的变量是事先定义好的,在头信息结束的时候,在写入

29、一段空信息,这样 Smtp 服务器才会认为你已经写完了。WriteStream(AuthStream(“This is a multi-part message in MIME format.“);WriteStream(“);这里只是一端描述性内容。/从此处开始进行分隔输入WriteStream(“-unique-boundary-1“);/在此处定义第二个分隔符WriteStream(“Content-Type: multipart/alternative;Boundary=“unique-boundary-2“);WriteStream(“);/文本信息WriteStream(“-uni

30、que-boundary-2“);WriteStream(“Content-Type: text/plain;charset=“+this.charset);WriteStream(“Content-Transfer-Encoding:“+this.encode);WriteStream(“);WriteStream(body);WriteStream(“);/一个部分写完之后就写如空信息,分段/html 信息 WriteStream(“-unique-boundary-2“);WriteStream(“Content-Type: text/html;charset=“+this.charse

31、t);WriteStream(“Content-Transfer-Encoding:“+this.encode);WriteStream(“);WriteStream(htmlbody);WriteStream(“);WriteStream(“-unique-boundary-2-“);/分隔符的结束符号,尾巴后面多了-WriteStream(“);/增加附件Attachment();/这个方法是我们在上面讲过的,实际上他放在这WriteStream(“);WriteStream(“-unique-boundary-1-“)if (!OperaStream(“.“,“250“)/最后写完了,输

32、入“.”this.Close(); /关闭连接这就是一封邮件的核心部分,上面的变量都是已定义好的全局变量,由用户传递给对象。整个邮件组件的主要内容到此告一段落。手指都敲酸了,由于本人水平有限,可能有些地方不太让人满意,在此表示歉意。在研究邮件发送之前,在网上四处搜索资料,却没有收获,似乎大家都愿意把经验烂在肚子里,由于我肠胃不够强壮,所以希望能够和大家共同分享这顿美餐。最后我们看看如何应用。在 aspx 文件或者其他 cs 文件中引用:MailSend Ms=new MailSend();/构造对象Ms.SMTPServer=””;/传递参数Ms.send();/发送邮件在此篇文章中我并没有给

33、出完整的代码,而只是给出了代码片段,但是这已经足够整理出整个程序了。使用 C#发送邮件http:/ VS2003 中有一个专门的 System.Web.Mail 类用来处理,使用还是很简单的,以前就写过。VS2005 中做了升级,用一个新的 System.Net.Mail 类,MailAddress from = new MailAddress(““, “高升“); /邮件的发件人MailMessage mail = new MailMessage();/设置邮件的标题mail.Subject = txtSubject.Text;/设置邮件的发件人/Pass:如果不想显示自己的邮箱地址,这里可

34、以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用mail.From = from;/设置邮件的收件人string address = “;string displayName = “;/*/* 这里这样写是因为可能发给多个联系人,每个地址用 ; 号隔开一般从地址簿中直接选择联系人的时候格式都会是 :用户名1 ; 用户名2 ; 因此就有了下面一段逻辑不太好的代码如果永远都只需要发给一个收件人那么就简单了 mail.To.Add(“收件人mail“);*/string mailNames = (txtMailTo.Text + “;“).Split(;);for

35、each (string name in mailNames)if (name != string.Empty)if (name.IndexOf( 0)displayName = name.Substring(0, name.IndexOf(, );elsedisplayName = string.Empty;address = name.Substring(name.IndexOf(, );mail.To.Add(new MailAddress(address, displayName);/设置邮件的抄送收件人/这个就简单多了,如果不想快点下岗重要文件还是CC一份给领导比较好mail.CC.

36、Add(new MailAddress(“M“, “尊敬的领导“);/设置邮件的内容mail.Body = txtBody.Text;/设置邮件的格式mail.BodyEncoding = System.Text.Encoding.UTF8;mail.IsBodyHtml = true;/设置邮件的发送级别mail.Priority = MailPriority.Normal;/设置邮件的附件,将在客户端选择的附件先上传到服务器保存一个,然后加入到mail中string fileName = txtUpFile.PostedFile.FileName.Trim();fileName = “D:

37、UpFile“ + fileName.Substring(fileName.LastIndexOf(“) + 1);txtUpFile.PostedFile.SaveAs(fileName); / 将文件保存至服务器mail.Attachments.Add(new Attachment(fileName);mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;SmtpClient client = new SmtpClient();/设置用于 SMTP 事务的主机的名称,填IP地址也可以了client.

38、Host = ““;/设置用于 SMTP 事务的端口,默认的是 25/client.Port = 25;client.UseDefaultCredentials = false;/这里才是真正的邮箱登陆名和密码,比如我的邮箱地址是 hbgxhotmail, 我的用户名为 hbgx ,我的密码是 xgbhclient.Credentials = new System.Net.NetworkCredential(“hbgx“, “xgbh“);client.DeliveryMethod = SmtpDeliveryMethod.Network;/都定义完了,正式发送了,很是简单吧!client.S

39、end(mail);System.Web.Mail/用 System.Web.Mail 的写法MailMessage mail = new MailMessage();mail.To = txtMailTo.Text; /收件人,多个收件人用 ; 号隔开,很是灵活mail.Subject = txtSubject.Text; /主题mail.Body = txtBody.Text; /内容mail.BodyFormat = MailFormat.Html;mail.Priority = MailPriority.Normal;/显示的发件人mail.Fields.Add(“http:/ ““)

40、;/实际发件人mail.Fields.Add(“http:/ ““);/用户名mail.Fields.Add(“http:/ “hbgx“);/密码mail.Fields.Add(“http:/ “xgbh“);mail.Fields.Add(“http:/ “1“); /验证级别SmtpMail.SmtpServer = ““;SmtpMail.SmtpServer.Insert(0, ““);SmtpMail.Send(mail);用 C#创建 Windows 服务(Windows Services)http:/ 服务在 Visual Studio 以前的版本中叫 NT 服务,在 VS.n

41、et 启用了新的名称。用Visual C# 创建 Windows 服务不是一件困难的事,本文就将指导你一步一步创建一个Windows 服务并使用它。这个服务在启动和停止时,向一个文本文件中写入一些文字信息。第一步:创建服务框架 要创建一个新的 Windows 服务,可以从 Visual C# 工程中选取 Windows 服务(Windows Service)选项,给工程一个新文件名,然后点击 确定。 你可以看到,向导向工程文件中增加 WebService1.cs 类:如下图来设置属性:其中各属性的含意是: Autolog 是否自动写入系统的日志文件 CanHandlePowerEvent 服务

42、时候接受电源事件 CanPauseAndContinue 服务是否接受暂停或继续运行的请求 CanShutdown 服务是否在运行它的计算机关闭时收到通知,以便能够调用 OnShutDown 过程 CanStop 服务是否接受停止运行的请求 ServiceName 服务名第二步:向服务中增加功能 在 .cs 代码文件中我们可以看到,有两个被忽略的函数 OnStart 和 OnStop。 OnStart 函数在启动服务时执行,OnStop 函数在停止服务时执行。在这里,当启动和停止服务时,向一个文本文件中写入一些文字信息,代码如下:protected override void OnStart(

43、string args)FileStream fs = new FileStream(“d:mcWindowsService.txt“ , FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(“mcWindowsService:Service Started“+DateTime.Now.ToString()+“

44、n“); m_streamWriter.Flush();m_streamWriter.Close();fs.Close();protected override void OnStop()FileStream fs = new FileStream(“d:mcWindowsService.txt“ , FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(“ mcWindowsService: Service Stopped “+DateTime.Now.ToString()+“n“); m_streamWriter.Flush();m_streamWriter.Close();fs.Close(); 第三步: 将安装程序添加到服务应用程序Visual Studio.NET 随附有安装组件,可用来安装与服务应用程序相关联的资源。安装组件在正在安装到的系统上注册一项单个的服务,并使服务控制管理器知道该服务的存在。要正确安装服务,并不需要在安装程序中进行任何特殊编码。但是,如果需要向安装

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报