标题:c# 变态篇:string 的翻身革命
只看楼主
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
结帖率:80.91%
已结贴  问题点数:20 回复次数:12 
c# 变态篇:string 的翻身革命
c# 变态篇:string 的翻身革命
string是各种编程语言中最基础的数据类型,长期以来受尽其它类的压迫,经常被肢解(Substring、Split)、蹂躏(Join)...
 
而现在string要“翻身闹革命”了,它几乎无所不能,可以为所欲为,令其它类心惊胆颤...
 
让我们来看一下革命后的string做了些什么?

1 打开文件或网址
[color=#800080]1      "c:\\t.txt".Open();
2      "http://".Open();
怎么做到的呢?看扩展,很简单,直接调用调用了Process.Start函数:
1     public static void Open(this string s)
2     {
3         Process.Start(s);
4     }

 单单打开个文件,窃取他人信息只是初步操作,string还可以修改、删除、创建文件(或目录)

2 文件及目录操作
1     @"C:\Directory".CreateDirectory();
2     @"C:\Directory\readme.txt".WriteText("this file is created by string!");
3     @"C:\abc.txt".DeleteFile();
实现同样简单,调用File及Directory类。以下上面三个扩展的实现。(当然还可以实现更多文件及目录操作,很简单,不再给出!)
程序代码:
 1     public static void CreateDirectory(this string path)

 2     {

 3         Directory.CreateDirectory(path);

 4     }

 5     public static void WriteText(this string path, string contents)

 6     {

 7         File.WriteAllText(path, contents);

 8     }      

 9     public static void DeleteFile(this string path)
10     {
11         if(File.Exists(path)) File.Delete(path);
12     }


  还是感觉不过瘾,想要删除整个硬盘的文件,用上面的一个一个来也太麻烦了。也没问题,看下面

3 执行DOS命令
先看两个简单的
1     string output1 = "del c:\\t1.txt".ExecuteDOS();
2     string output2 = "dir".ExecuteDOS();

 实现也用了Process类,如下:










[/color]
搜索更多相关主题的帖子: 编程语言 color 
2012-01-18 13:19
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:0 

程序代码:
 1     public static string ExecuteDOS(this string cmd, out string error)

 2     {

 3         Process process = new Process();

 4         process.StartInfo.FileName = "cmd.exe";

 5         process.StartInfo.UseShellExecute = false;

 6         process.StartInfo.RedirectStandardInput = true;

 7         process.StartInfo.RedirectStandardOutput = true;

 8         process.StartInfo.RedirectStandardError = true;

 9         process.StartInfo.CreateNoWindow = true;
10         process.Start();
11         process.StandardInput.WriteLine(cmd);
12         process.StandardInput.WriteLine("exit");
13         error = process.StandardError.ReadToEnd();
14         return process.StandardOutput.ReadToEnd();
15     }
程序代码:


 DOS命令也会有异常发生,下面的实现可通过out参数返回错误信息:

 1     public static string ExecuteDOS(this string cmd) 2     { 3         Process process = new Process(); 4         process.StartInfo.FileName = "cmd.exe"; 5         process.StartInfo.UseShellExecute = false; 6         process.StartInfo.RedirectStandardInput = true; 7         process.StartInfo.RedirectStandardOutput = true; 8         process.StartInfo.RedirectStandardError = true; 9         process.StartInfo.CreateNoWindow = true;10         process.Start();11         process.StandardInput.WriteLine(cmd);12         process.StandardInput.WriteLine("exit");13         return process.StandardOutput.ReadToEnd();14     }



出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2012-01-18 13:21
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:0 
有了这个扩展,格式化硬盘、关机、重启都不在话下!
1     "format c:".ExecuteDOS();
2     "shutdown -s".ExecuteDOS();
3     "shutdown -r".ExecuteDOS();
 以上对付一般用户的电脑足够了,可但对程序员的电脑,他们居然把信息放进了数据库!同样有办法!

4执行SQL
程序代码:
[color=#800080]1     DbConnection conn =
2     int count = "select count(*) from Girlfriends".ExecuteScalar(conn).Cast<int>();


 1     public static object ExecuteScalar(this string sql, DbConnection conn)

 2     {

 3         object result;

 4         using (DbCommand cmd = conn.CreateCommand())

 5         {

 6             cmd.Connection = conn;

 7              = sql;

 8              = System.9             conn.Open();
10             result = cmd.ExecuteScalar();
11             conn.Close();
12         }
13         return result;
14     }

1     public static T Cast<T>(this object obj)
2     {
3         return (T)obj;
4     }
[/color]

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2012-01-18 13:23
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2545
专家分:9359
注 册:2007-11-3
得分:0 
现在可以执行了。结果是***  同样还可以实现更多数据库操作。

总结
 
 string还可以做更多更多事情,只要你支持它!但不要给它太多太大的权力,万一哪天比你强大了...

 (改)变(形)态篇 文章,仅供开拓思路,实际项目慎用!


出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2012-01-18 13:24
wangzhen_andy
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:39
专家分:25
注 册:2008-9-22
得分:5 
LZ说的有点不太明白,这种改变是怎么来的呢?
看着又不像是继承了string类,倒像string类里面增加了这些函数。是string类本身的升级吗?

说下个人感觉:这些函数确实看起来很简单,但是感觉和原来的用法相比,复杂度也没有太大变化,而且这些要是封装到string类本身的话,我感觉是比较蛋疼,因为这些真的跟string的关系不密切,楼主解释下我第一个问题吧,不太懂。
2012-01-18 15:21
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
得分:5 
围观一下……
2012-01-18 15:24
xiangyu107
Rank: 1
等 级:新手上路
帖 子:2
专家分:7
注 册:2011-9-23
得分:5 
不错
2012-01-19 11:50
chtml小兵
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:126
专家分:314
注 册:2011-10-3
得分:5 
有些没见过,收藏学习了

做个程序员吧,在里面找到万千对象~~~~~~
百名书阁(bmbook.5d6d)__最全IT图书免费下载中心
net图书资料/软件工具大全____免费!!!
各种编程语言教程应有尽有
2012-01-19 14:05
cpsa3
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-2-2
得分:0 
楼主可不可以说下这是怎么实现的 ~
2012-02-02 15:56
weihuixian
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-1-5
得分:0 
道行浅,不明白
2012-02-02 16:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-359825-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.149578 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved