C#/.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()方法创建文件夹,代码如下:
 

  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();
                                            //提示信息
    }

 


用Delete()方法删除文件夹,代码如下:
  

try
    {
        if (!Directory.Exists(textBox1.Text))            //判断文件夹是否存在
        {
             label1Text = "该文件夹不存在";            //提示信息
        }
        else
        {
             Directory.Delete(textBox1.Text);            //删除文件夹
            
             label1.Text = "删除文件夹成功!";        //提示信息
        }
    }
    catch (Exception ee)                                    //捕获异常
    {
         label1.Text = "删除失败!原因:" + ee.ToString();
    }

 


用Move()方法移动文件夹,代码如下:
 

  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;
    }
    catch (Exception ee)                                    //捕获异常
    {
        label1.Text = "移动失败!原因:" + ee.ToString();
    }

 


【运行结果】选择“调试”|“启动调试”命令运行程序,结果如图19.2所示。

【代码解析】在第3行中,用Directory类的Exists()方法来判断文件夹是否存在。在Exists()方法中,

一般传递进来的参数就是文件夹的名称或者路径。在对文件夹进行操作前,判断它是否存在,可以减少异常的发生。

在第10行代码中,用CreateDirectory()方法创建文件夹。第26行和46行分别是删除和移动文件夹。

另外,FileInfo类可用来获取文件的基本信息,如创建时间、文件大小等。如要获取一个文件的基本信息,

首先需实例化一个FileInfo类的对象来映射该文件。例如:

    FileInfo aFile= new FileInfo("C:\\hoan.txt");        //实例化一个对象
    aFile.CreationTime;                                       //获取创建时间
    aFile.Extension;                                            //获取扩展名
    aFile.Length;                                                //获取大小

 



19.1.3 读取文件

在.NET Framework类库中,对文件的读取也很简单。用StreamReader类和FileStream类就能办到,

它们常用来对文件进行读写操作。它们提供ReadAllText()、ReadAllLines()和ReadAllBytes()方法读取文件。

提示:几乎任何应用编程都会涉及I/O操作,读者务必掌握。

【范例19-3】在本例中演示如何使用StreamReader类读取文件,将编写一个能打开.txt文件的小应用程序。

这里打开的.txt文件是简体中文文本。如示例代码19-3所示。

示例代码19-3
   

using System;                                        //统命名空间,包含基本类和基类
    ……
    using System.IO;                                    //包含文件操作的命名空间
    using System.Collections;                        //命名空间包含接口和类,各种数据结构的集合
    namespace Ex_19_3
    {
        public partial class Form1 : Form            //窗体类
        {
            public Form1()                            //构造函数
            {
                InitializeComponent();                //完成初始化工作
            }
            private void button1_Click(object sender, EventArgs e)
            {
         //注意UnicodeEncoding.GetEncoding("GB2312")是保证输出的中文文本能正常显示
         StreamReader objReader = new StreamReader("test.txt", UnicodeEncoding. GetEncoding("GB2312"));
                string sLine = "";                        //定义一个变量,并赋空值
                ArrayList arrText = new ArrayList();
                                                           //创建一个动态数组
                while (sLine != null)
                {
                    sLine = objReader.ReadLine();
                                                           //读出文件,并赋给变量sLine
                    if (sLine != null)                    //如果有数据读出
                    arrText.Add(sLine);                //添加到数组中,它的长度可以动态地改变
                }
                objReader.Close();                    //关闭StreamReader对象
                foreach (string sOutput in arrText)
                                                            //使用foreach循环将新填充的ArrayList内容写入
                textBox1.Text = sOutput;            //将文本的内容赋给文本框
            }
        }
    }

 


【运行结果】选择“调试”|“启动调试”命令运行程序。

【代码解析】本例中,第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
   

using System.IO;                                //包含文件操作的命名空间
    namespace Ex_19_4
    {
        public partial class Form1 : Form
        {
            public Form1()                            //窗口类的构造函数
            {
                InitializeComponent();                //完成初始化工作
            }
            private void button1_Click(object sender, EventArgs e)
                                                        //按钮单击事件,用于写入文件
            {
                File.WriteAllText("demo.txt", textBox1.Text);
                                                        //向文本文件中写入
            }
            private void button2_Click(object sender, EventArgs e)
            {
                string[] movies ={"欢迎你", "21天学会C#"};
                                                        //定义一个字符串数组
                File.WriteAllLines("demo.txt", movies);
                                                        //写入到文本文件中
            }
        }
    }

 


【运行结果】选择“调试”|“启动调试”命令运行程序。

【代码解析】在本例中,程序非常简单。在第12行处,是从文本中获取数据,然后写入demo.txt文件中,

关于.NET技术 等其他计算机技术,欢迎加群一起讨论 3群 70536418 2群 5851499 1群 12672376

posted @ 2012-04-11 10:20  .NET技术讨论群  阅读(393)  评论(0)    收藏  举报