.NET对文件与文件夹的操作

在.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所示。

【代码解析】在第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行定义的字符串数组写入文件中,请注意观察两个元素之间是如何换行的。(本文节选自《21天学通C#》一书)

posted @ 2009-12-31 14:44  旭 日  阅读(1030)  评论(0编辑  收藏  举报