二十一天学通C#:.NET中文件与文件夹的操作

.NET中文件与文件夹的操作
本文节选自《21天学通C#》一书

    在.NET Framework类库中,提供了DirectoryInfo类,用于对文件夹进行操作,移动和删除文件夹可以使用它提供的MoveTo()和Delete()方法来完成。.NET Framework类库还提供了File类,用于对文件的操作。它和Directory类一样,也有两个方法可以用于文件的移动和删除,它们是Move()和Delete()方法。在本节中,将介绍文件和文件夹的移动、复制和删除。
使用File类的Move()方法,可以将指定的文件移动到新的位置,并且可以重新为它命名。它有两个参数。第一个参数就是要移动的文件路径和名称,第二个参数是文件的新路径。例如:
01    File.Move(“C://hoan.txt”,”D://hoan.txt”);
使用File类的Copy()方法,可以将指定的文件复制到新的位置。它也有两个参数,第一个参数就是要移动的文件的路径和名称,第二个参数是文件的新路径。例如:
01    File.Copy(“C://hoan.txt”,”D://hoan.txt”);

注意:Copy()方法的第二个参数不能是一个已经存在的目录或文件,否则在程序运行时将会有异常。另外,在进行程序设计时,这个部分代码最好包含在try块中。
使用File类的Delete()方法,可以将文件删除。它有一个参数,表示要删除的文件路径。此路径可以是相对路径,也可以是绝对路径。例如:
File.Delete(“D://hoan.txt”);
【范例19-2】在本例中,演示如何使用Directory类和DirectoryInfo类创建、移动和删除文件夹。如示例代码19-2所示。
示例代码19-2
  用CreateDirectory()方法创建文件夹,代码如下:
01    try                                        //可能会引发异常
02    {
03        if (Directory.Exists(textBox1.Text))    //判文件夹是否存在
04        {
05             label1.Text = "该文件夹已经存在";        //提示信息
06             return;
07        }
08        else                                    //如果文件夹不存在
09        {
10            DirectoryInfo dirinfo = System.IO.Directory.CreateDirectory(textBox1. Text);                                            //创建文件夹
11            label1.Text ="创成功,创建时间为:"+ Directory.GetCreationTime(textBox1. Text);
12        }
13    }
14    catch (Exception ee)                        //捕获异常
15    {
16        label1.Text = "创建失败!原因:" + ee.ToString();
                                            //提示信息
17    }
  用Delete()方法删除文件夹,代码如下:
18    try
19    {
20        if (!Directory.Exists(textBox1.Text))    //判断文件夹是否存在
21        {
22             label1Text = "该文件夹不存在";            //提示信息
23        }
24        else
25        {
26             Directory.Delete(textBox1.Text);    //删除文件夹
27             label1.Text = "删除文件夹成功!";        //提示信息
28        }
29    }
30    catch (Exception ee)                        //捕获异常
31    {
32         label1.Text = "删除失败!原因:" + ee.ToString();
33    }
  用Move()方法移动文件夹,代码如下:
34    try
35    {
36        if (!Directory.Exists(textBox1.Text))        //判断源文件夹是否存在
37        {
38                label1.Text = "源文件夹不存在!";            //提示信息
39                return;
40        }
41        if (Directory.Exists(textBox2.Text))        //判断目标文件夹是否存在
42        {
43            label1.Text = "目标文件夹已经存在!";        //输出提示信息
44            return;
45        }
46        Directory.Move(textBox1.Text, textBox2.Text);//移动文件夹
47        label1.Text = "文件夹移动成功!源文件已经被移除。目标文件夹为" + textBox1.Text;
48    }
49    catch (Exception ee)                            //捕获异常
50    {
51        label1.Text = "移动失败!原因:" + ee.ToString();
52    }
【运行结果】选择“调试”|“启动调试”命令运行程序,结果如图19.2所示。
 
图19.2  文件夹创建成功
【代码解析】在第3行中,用Directory类的Exists()方法来判断文件夹是否存在。在Exists()方法中,一般传递进来的参数就是文件夹的名称或者路径。在对文件夹进行操作前,判断它是否存在,可以减少异常的发生。在第10行代码中,用CreateDirectory()方法创建文件夹。第26行和46行分别是删除和移动文件夹。
另外,FileInfo类可用来获取文件的基本信息,如创建时间、文件大小等。如要获取一个文件的基本信息,首先需实例化一个FileInfo类的对象来映射该文件。例如:
01    FileInfo aFile= new FileInfo("C://hoan.txt");        //实例化一个对象
02    aFile.CreationTime;                                //获取创建时间
03    aFile.Extension;                                    //获取扩展名
04    aFile.Length;                                        //获取大小
19.1.3  读取文件
在.NET Framework类库中,对文件的读取也很简单。用StreamReader类和FileStream类就能办到,它们常用来对文件进行读写操作。它们提供ReadAllText()、ReadAllLines()和ReadAllBytes()方法读取文件。

提示:几乎任何应用编程都会涉及I/O操作,读者务必掌握。
【范例19-3】在本例中演示如何使用StreamReader类读取文件,将编写一个能打开.txt文件的小应用程序。这里打开的.txt文件是简体中文文本。如示例代码19-3所示。
示例代码19-3
01    using System;                        //统命名空间,包含基本类和基类
02    ……
03    using System.IO;                    //包含文件操作的命名空间
04    using System.Collections;            //命名空间包含接口和类,各种数据结构的集合
05    namespace Ex_19_3
06    {
07        public partial class Form1 : Form    //窗体类
08        {
09            public Form1()                //构造函数
10            {
11                InitializeComponent();    //完成初始化工作
12            }
13            private void button1_Click(object sender, EventArgs e)
14            {
15         //注意UnicodeEncoding.GetEncoding("GB2312")是保证输出的中文文本能正常显示
16         StreamReader objReader = new StreamReader("test.txt", UnicodeEncoding. GetEncoding("GB2312"));
17                string sLine = "";        //定义一个变量,并赋空值
18                ArrayList arrText = new ArrayList();
                                    //创建一个动态数组
19                while (sLine != null)
20                {
21                    sLine = objReader.ReadLine();
                                    //读出文件,并赋给变量sLine
22                    if (sLine != null)    //如果有数据读出
23                    arrText.Add(sLine);    //添加到数组中,它的长度可以动态地改变
24                }
25                objReader.Close();        //关闭StreamReader对象
26                foreach (string sOutput in arrText)
                                    //使用foreach循环将新填充的ArrayList内容写入
27                textBox1.Text = sOutput;    //将文本的内容赋给文本框
28            }
29        }
30    }
【运行结果】选择“调试”|“启动调试”命令运行程序。
 
【代码解析】本例中,第16行处的UnicodeEncoding.GetEncoding("GB2312")语句作用是保证打开的txt文档不是乱码,它将以GB2312的编码格式输出。如果没有这一处理,那么输出的内容中,中文部分将会是乱码。
19.1.4  写入文件
使用.NET类库进行读取文件非常简单,同样地,写入文样也一样简单。两种操作都有现存的类可以直接调用。基类库提供WriteAllText()、WriteAllBytes()和WriteAllLines()方法,使用它们可以写入文件。

注意:WriteAllText()、WriteAllBytes()和WriteAllLines()方法都会覆盖以前的文件,所以在使用这些方法时要小心。在下面的示例中,两次写入的数据都会相互覆盖掉。这样的情况,在实际开发中,很少需要,当然也有一些功能是需要覆盖原始数据的。例如计数器的内容,它本来就是一个不断更新的数据值,所以会将新计算的数覆盖原始数据。
【范例19-4】为了说明在C#中WriteAllText()方法如何写入文件。创建一个Windows窗体应用程序,将窗体上的多行文本框中的数据输入.txt文件。同时,也演示如何利用WriteAllLines()方法写入字符串数组。如示例代码19-4所示。
示例代码19-4
01    using System.IO;                        //包含文件操作的命名空间
02    namespace Ex_19_4
03    {
04        public partial class Form1 : Form
05        {
06            public Form1()                    //窗口类的构造函数
07            {
08                InitializeComponent();        //完成初始化工作
09            }
10            private void button1_Click(object sender, EventArgs e)
                                        //按钮单击事件,用于写入文件
11            {
12                File.WriteAllText("demo.txt", textBox1.Text);
                                        //向文本文件中写入
13            }
14            private void button2_Click(object sender, EventArgs e)
15            {
16                string[] movies ={"欢迎你", "21天学会C#"};
                                        //定义一个字符串数组
17                File.WriteAllLines("demo.txt", movies);
                                        //写入到文本文件中
18            }
19        }
20    }
【运行结果】选择“调试”|“启动调试”命令运行程序。
【代码解析】在本例中,程序非常简单。在第12行处,是从文本中获取数据,然后写入demo.txt文件中,这个文件和程序在同一目录中。第17行是将16行定义的字符串数组写入文件中,请注意观察两个元素之间是如何换行的。

注意:要将textBox控件设置成多行文本框,请先将它的Multiline属性设置为true。如果数据行数据过多,还要设置让它显示滚动条。

你可能感兴趣的:(二十一天学通C#:.NET中文件与文件夹的操作)