ProgressBar控件的应用;文件的读出和写入;目录和文件管理;检索计算机上逻辑驱动器盘符;XML文件的增加、修改、读节点内容


今天学的知识整理:

1、ProgressBar控件的应用

Maximum最大值,Minimum最小值,Value当前的进度值

//调用PerformStep方法,设置step步长规定每次增加进度条

  方法一:通过循环实现
	progressBar1.Maximun=100;
	progressBar1.Minimun=1;
	progressBar1.Step = 10;
            for (int i = 1; i < 100; i++)
            {
                progressBar1.Value = i;
                Thread.Sleep(100);//100ms通过线程休眠实现平滑过渡的效果
            }
	方法二:通过PerformStep方法实现
	progressBar1.Maximun=100;
	progressBar1.Minimun=1;
	progressBar1.Step = 1;
         	  for (int i = 1; i <= 100; i++)
            {               
                progressBar1.PerformStep();
            }//实际操作中可结合Timer控件考虑综合功能的开发


2、文件的读出和写入

2.1 读文件:文件的读取 StreamReader 和FileStream类,用到的方法有ReadAllText(),ReadAllLines(),ReadAllBytes()读取文件。

StreamReader objReader = new StreamReader(@"D:\30天实例开发光盘\huihui.txt", UnicodeEncoding.GetEncoding("GB2312"));
//@放在字符串前使用,意思是声明这个字符串中没有转义字符。例如@"\r",表示的不是换行了,而是字符串\r string sLine = "";
            ArrayList arrText = new ArrayList();//需要添加Collections命名空间
            while (sLine != null)
            {
                sLine = objReader.ReadLine();
                if (sLine != null)
                    arrText.Add(sLine);
            }
            objReader.Close();
            foreach (string sOutput in arrText)
            {//   \r\n与\n是有区别的。 如果要通用的则是\r\n,因为有些编辑器它不认\n 

                richTextBox1.Text += sOutput + "\r\n";// 一定要有“+”号否则文本只显示只有最后一行数据

            }
//默认声明的string类型的变量和属性以及字段在未赋值的情况下均为null,这个null不仅仅表示为无字符,更表示为空的引用。string userName;此时判断userName是否为空应该是if(userName==null)而不是if(userName==“”),并且使用userName.Equals(null)或userName.Equals(“”)均为错的,因为此时userName是个空引用,根本无法调用Equals()方法。
//所有控件的Text属性的在未赋值的情况下是空值(""), 而不是null.可以调用Equals()方法。


2.1 写文件:文件的写入,基类库提供WriteAllText()、WriteAllBytes(),WriteAllLines()覆盖以前的文件。计数器时可以应用这一覆盖特性进行更新数值。

	方法一:通过字符串数组实现:
	string[] phrase = { "欢迎您!","您好!你真漂亮!"};
          File.WriteAllLines("demo.txt",phrase);
	方法二:通过文本框控件实现
 	File.WriteAllText("DEMO.txt", textBox1.Text);

3、目录和文件管理

Directory 和File类只有静态方法,可以对应创建、删除文件夹,文件
DirectoryInfo和FileInfo主要有文件的创建时间和大小,可以实例化,有公共方法、公共属性、构造函数。

3.1 创建文件夹

 void CreateDiretory()
        {
            try
            {
                if (Directory.Exists(textBox1.Text))
                { label1.Text = "该文件夹已经存在!"; return; }
                else
                {//创建文件夹
                    DirectoryInfo dirInfo = System.IO.Directory.CreateDirectory(textBox1.Text);
                    label1.Text = "创建成功!创建时间为:" + Directory.GetCreationTime(textBox1.Text);
                }
            }
            catch (Exception ee)
            { label1.Text = "创建失败!原因:" + ee.ToString(); }
        }

3.2 删除文件夹

	 try
            {
                if (!Directory.Exists(textBox1.Text))
                { label1.Text = "给文件夹不存在!"; return; }
                else
                {
                    Directory.Delete(textBox1.Text);
                    label1.Text = "删除成功!";
                }
            }
            catch (Exception ee)
            {
                label1.Text = "删除失败!原因是:" + ee.ToString();
            }

3.3移动文件夹

 void MoveDiretory()
        {
            try
            {
                if (!Directory.Exists(textBox1.Text))
                { label1.Text = "给文件夹不存在!"; return; }
                if (Directory.Exists(textBox2.Text))
                { label1.Text = "目标文件夹已经存在!"; return; }

                Directory.Move(textBox1.Text, textBox2.Text);
                label1.Text = "文件夹移动成功!已经从" + textBox1.Text + "移动到" + textBox2.Text;
            }
            catch (Exception ee)
            { label1.Text = "移动失败!原因" + ee.ToString(); }
        }

3.4 检索计算机上逻辑驱动器盘符

 string[] drives = Directory.GetLogicalDrives();
            for (int i = 0; i < drives.Length; i++)
            { listBox1.Items.Add(drives[i]); }

4、XML文件的增加、修改、读节点内容
XML与HTML区别:XML用于表示数据,而不只是规定数据的显示格式。标识数据可以看出其中的意义。XML能指明意义的数据机制。

//每执行一次,增加一个根节点下的author节点,节点内容为netname,该节点包含子节点name
void AddNode()
        {
            XmlDocument doc = new XmlDocument();
            XmlTextReader reader = new XmlTextReader("book.xml");
            doc.Load("book.xml");
            XmlElement root = doc.DocumentElement;
            XmlElement tagMsg = doc.CreateElement("author");
            XmlElement tagName = doc.CreateElement("name");
            tagMsg.InnerText = "authorname";
            tagName.InnerText = "detailname";
            tagMsg.AppendChild(tagName);
            root.AppendChild(tagMsg);
            reader.Close();
            doc.Save("book.xml");
        }
//修改节点内容属性值
void ModifyNode()
        { XmlDocument doc = new XmlDocument();
          doc.Load("book.xml");
          XmlNode xmlauthor = doc.SelectSingleNode("/root/author");
          xmlauthor.Attributes["name"].InnerText="慧慧";
          doc.Save("book.xml");
        }
//读节点内容属性值
void ReadNode()
        { XmlDocument doc = new XmlDocument();
          doc.Load("book.xml");
          XmlNode xuser = doc.SelectSingleNode("root/book/bookname");
          //string flag = xuser.Attributes["bookname"].InnerText;
          label1.Text =xuser.InnerText;
        }
//具体参见:http://blog.csdn.net/ilovewebservice/article/details/5989646

5、线程间通信

//方法一:通过结构体传递数据,也可以通过公共的全局变量实现
    //public struct threadData//利用结构体传递线程间信息
    //{ public string Msg;}//要传送的数据放在Msg中
 //方法二 :通过类传递数据
    class MyThreadClass
    {
        //一个类来传送数据,定义构造类中一个字段,用于保存要传递的数据
            private string Msg;
            public MyThreadClass(string Msg)
            { this.Msg = Msg; }
            public void ThreadMain()
            { Console.WriteLine("字段Msg的值是:{0}", Msg); }
        
    }
调用程序:MyThreadClass o1 = new MyThreadClass("我是线程1,优先级Highest!");
            Thread t1 = new Thread(o1.ThreadMain);
            t1.Priority = ThreadPriority.Highest;//设定线程优先级
            t1.Start();
//方法三:通过静态方法
            Thread t = new Thread(ThreadMain);//ThreadMain它必须是静态方法
            t.Start();
            Console.WriteLine("主线程");
            static void ThreadMain()
           { Console.WriteLine("线程2"); }    
	  Console.Read();	//该语句的作用等待新内容读入,从而避免运行后的dos界面窗口一闪而过

补充:由于线程的优先级是动态分配的,所以程序员也无法知道启动的线程是哪一个先执行。
如果有一个线程一直需要使用CPU,而且又不等待资源,那么它的优先级就会降低。如果某一个线程在等待资源,那么它的优先级就会上升。可以指定优先级进行控制。
6、注册表类:在Windows 操作系统中,有一个控制操作系统功能和软件硬件工作的数据库文件,就是注册表。它以树形结构存放的多层次。运行窗口中输入命令regedit
(1)对注册表操作,用到Registry和RegistryKey类,这两个类不允许被继承。
(2)RegistryKey类表示一个注册表项,该方法可以浏览子键,创建新键,读取或修改键中的值。
Registry能对注册表键进行单一的访问,执行简单的操作。
(3)注册表与系统稳定性有关,不可胡乱修改,对注册表事先进行备份,再进行练习修改实例。
Registry类提供7个公共静态域,分别与系统相对应。如Registry.ClassRoot和HKEY_CLASSES_ROOT对应。以此类推。









   

你可能感兴趣的:(ProgressBar控件的应用;文件的读出和写入;目录和文件管理;检索计算机上逻辑驱动器盘符;XML文件的增加、修改、读节点内容)