c#
4、c#进阶:md5加密、进程、线程、gdi 、xml、委托 -凯发ag旗舰厅登录网址下载
md5加密
将字符串进行加密,无法解密。网上的解密方式也都是在库里找,找不到也没有。
1 protected void page_load(object sender, eventargs e) 2 { 3 string s = "123"; 4 response.write(getmd5(s)); 5 } 6 public string getmd5(string str) 7 { 8 md5 md5 = md5.create();//md5抽象类无法实例化 实例化该方法 9 byte[] buffer = encoding.default.getbytes(str); //将字符串转换为字节数组 10 byte[] mdbuffer = md5.computehash(buffer); //调用computehash方法把数组传进去 11 //将字节数组中每个元素tostring(); 12 stringbuilder result = new stringbuilder(); 13 for (int i = 0; i < mdbuffer.length; i ) 14 { 15 result.append(mdbuffer[i].tostring("x2")); //tostring得到十进制字符串 tostring("x")十六进制字符串 tostring("x2")对齐 16 } 17 return result.tostring(); 18 }进制
表示某一位置上的数运算时是逢x进一位。二进制就是逢二进一, 十进制是逢十进一,十六进制是逢十六进一,以此类推.
so:二进制001010101只有0和1计算机中的数据都是二进制表示,四进制以0、1、2、3四个数字表示任何实数。十进制0~9数字组成,十六进制0~9以及abcedf组成(表示十进制数)10~15
tostring的特殊方法
时间:now.tostring("yyyy-mm-dd hh:mm:ss") 年-月-日 时:分:秒 具体可以自定单独写f y m d t 意义不同前者都可实现
字符型转换:int.tostring("n"); 640,000.00; int.tostring("c"); ¥640,000.00; .tostring("x");16进制
directory类
用来操作文件夹的
1 directory.createdirectory("d:/ccc/cc"); //创建文件夹 2 3 directory.delete("d:/ccc",true); //true删除非空文件夹 4 5 directory.move(@"d:/ccc", @"d:/cccc"); //剪切操作 源目录没了 必须同一卷轴d盘 6 7 string[] s = directory.getfiles(@"d:\项目\web\images\shiji"); //获得文件夹目录下所有文件全路径 8 9 string[] s = directory.getfiles(@"d:\项目\web\images\shiji","*.jpg"); //获得文件夹目录下指定后缀名文件全路径 10 11 string[] s = directory.getdirectories(@"d:\项目\web\images"); //获得文件夹目录下的文件夹的全路径 12 13 directory.exists(@"d:\项目\web\images") //是否存在某文件夹进程
我们可以把计算机中每一个运行的应用程序当作是一个进程
1 ///获得当前程序中正在运行的进程 2 process[] pros = process.getprocesses(); 3 foreach (var item in pros) 4 {//item.kill(); //关闭所有进程.
//item.processname; //进程名 5 console.write(item.tostring()); 6 } 7 //通过进程打开一些程序 8 process.start("calc"); //打开计算器 9 process.start("notepad"); //打开记事本 10 //打开指定文件 11 processstartinfo pro = new processstartinfo(@"d:\11.txt"); 12 process pr = new process(); 13 pr.startinfo = pro; 14 pr.start();
线程
每一个进程是由多个线程组成的。
单线程:让程序做多件事时,会引发卡死 假死状态。
多线程:让一个程序同时处理多个事情,后台运行程序,提高程序的运行效率。
前台线程:只有所有的前台线程都关闭才能完成程序关闭。(winform多窗口时)
后台线程:只要所有的前台线程结束,后台线程自动结束。
1 //实例化thread类,并传入一个指向线程所要运行的方法。(这时线程已经产生,但还没有运行) 2 //调用thread类的start方法,标记线程可以被cpu执行了,但具体执行事件由cpu决定。 3 thread th = new thread(test); //创建一个线程去执行这个方法。 4 th.isbackground = true; //将线程设置为后台线程,前台关闭后 线程结束。 5 th.start(); //标记准备就绪,可以随意被执行,具体什么时候执行由cpu决定。 6 //在.net下是不允许跨线程访问的。 7 //有时候需要手动释放线程 关闭时 判断线程是否关闭 8 if (th != null) 9 { 10 th.abort(); //结束这个线程 不能再start() 11 } 12 thread.sleep(3000); //睡眠3秒后执行 13 //线程执行带参数方法 14 thread.start("123"); object类型参数 在start后括号写参数多用于大量数据时,多分一个线程去搜索数据,然后存储到缓存里,页面再用异步获取缓存中的数据。
gdi
是一种绘图装置接口,可以用来绘制图片。
画直线
graphics g = this.creategraphics(); //创建gdi对象 pen pen = new pen(brushes.yellow); //创建画笔 point p1 = new point(30, 50); //创建两个点 point p2 = new point(250, 250); g.drawline(pen, p1, p2);画验证码
1 ///mvc中调用
1 public actionresult showvalidate() 2 { 3 var check = common.validate.validation(4); 4 byte[] buffer = common.validate.drawimg(check); 5 return file(buffer, "image/jpeg"); 6 }前台
if (validatecode.tolowercase() == getcode()) {return true; } function changecode() {$("#img").attr("src", $("#img").attr("src") "?"); }function getcode() {var cookies = document.cookie.split(";");for (var i = 0; i < cookies.length; i ) {var validate = cookies[i].split("=");if (validate[0].replace(/(^\s*)|(\s*$)/g, "") == "check") {return validate[1].replace(/(^\s*)|(\s*$)/g,"");}} }xml文件
可扩展标记性语言,用来保存轻量级数据。
xml的标签是成对出现的、并且是区分大小写的。
xml文档必须包含根节点,且只有一个。
创建xml文件
1 //创建xml对象 2 xmldocument doc = new xmldocument(); 3 //创建文档描述信息 4 xmldeclaration dec = doc.createxmldeclaration("1.0", "utf-8", null); 5 doc.appendchild(dec); 6 7 //创建根节点 8 xmlelement books = doc.createelement("books"); 9 doc.appendchild(books); 10 11 //创建子节点 12 xmlelement book1 = doc.createelement("book"); 13 books.appendchild(book1); //将子节点添加到books 14 15 //给book1子节点追加子节点 16 xmlelement name1 = doc.createelement("name"); 17 name1.innertext = "c#"; //赋值 文本值 18 book1.appendchild(name1); 19 20 xmlelement price1 = doc.createelement("price"); 21 price1.innerxml = "10.0"; //赋值 html标签 22 book1.appendchild(price1); 23 24 xmlelement items = doc.createelement("items"); 25 //给节点增加属性 26 items.setattribute("name", "c#"); 27 items.setattribute("price", "10.0"); 28 book1.appendchild(items); 29 30 doc.save("books.xml"); //保存 31 32 //创建后 33 34向已有xml文件中追加
1 xmldocument doc = new xmldocument(); 2 if (file.exists("books.xml")) 3 { 4 doc.load("books.xml"); //加载 xml 5 xmlelement books = doc.documentelement; //得到根节点 6 //再建立元素进行追加 7 }获取xml文件
1 xmldocument doc = new xmldocument(); 2 doc.load("books.xml"); 3 4 xmlelement books = doc.documentelement; 5 xmlnodelist xnl = books.childnodes; //得到所有节点 6 7 foreach (xmlnode v in xnl) //遍历得到所有节点值 8 { 9 console.writeline(v.innertext); 10 } 11 12 xmlnodelist xnl1 = doc.selectnodes("books/book/items"); //查找节点列表 13 foreach (xmlnode node in xnl1) 14 { 15 console.writeline(node.attributes["name"].value); //得到name属性的值 16 console.writeline(node.attributes["price"].value); //得到price属性的值 17 }删除xml文件
1 xmldocument doc = new xmldocument(); 2 doc.load("books.xml"); 3 4 xmlnode xnl = doc.selectsinglenode("books/book"); //查找单一节点 5 xnl.removeall(); //删除全部 6 doc.save("books.xml"); 7 console.readkey();linqtoxml
1 //兼容传统方法创建 2 xdocument xdoc = new xdocument(); 3 //xdoc.declaration = new xdeclaration() 默认utf-8 第一行不需要单独建 4 xelement xroot = new xelement("root", "值"); //定义元素 5 6 xelement xroot1 = new xelement("root1"); //定义元素2 7 xroot1.value = "值1"; 8 9 xattribute xattr = new xattribute("id", "1"); //定义属性 10 11 xdoc.add(xroot); //统一使用add添加 12 xroot.add(xattr); 13 14 xdoc.save(@"d:\linqtoxml.xml"); 15 16 //真正的linq语法 17 //f# 函数式编程语言 18 new xdocument( 19 new xelement("root", 20 new xattribute("id", "001"), 21 "值") 22 ).save(@"d:\2.xml"); 23 //链式编程,流水线生产 f1().f2().f3()... 24 25 //查找xml 26 xdocument xdoc = new xdocument(new xelement("root"));//根节点 27 xdoc.root.add(new xelement("person", 28 new xattribute("id", "1"), 29 new xattribute("name", "zhangsan"), 30 new xattribute("sex", "1") 31 )); //添加子节点 32 xdoc.root.add(new xelement("person", 33 new xattribute("id", "2"), 34 new xattribute("name", "lisi"), 35 new xattribute("sex", "2") 36 )); 37 xdoc.save(@"d:\2.xml"); 38 39 40委托
使用delegate定义委托,将一个方法作为参数传给另一个方法。
委托所指向的函数必须返回值与参数相同
多播委托
注册多个方法,调用时将这些方法依次执行一遍。
转载于:https://www.cnblogs.com/baidawei/p/4705392.html
总结
以上是凯发ag旗舰厅登录网址下载为你收集整理的4、c#进阶:md5加密、进程、线程、gdi 、xml、委托的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。
- 上一篇:
- 下一篇: