1<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />案例学习:了解FileInfo类的一些主要属性

下面的示例演示了 FileInfo 类的一些主要属性。
using System;

using System.IO;

class Test

{

    public static void Main()

{

        string fileName = "C:\\autoexec.bat";

            FileInfo fileInfo = new FileInfo(fileName);

            if (!fileInfo.Exists)

            {

                return;

            }

            Console.WriteLine("{0} has a directoryName of {1}",fileName,fileInfo.DirectoryName);

            /* 下面是代码的处理结果,

             * 实际的结果因机器不同:

             *

             * C:\autoexec.bat has a directoryName of C:\

             */

    }

}

2案例学习:实现文件的复制

本案例将解决,同磁盘环境下文件复制的问题。请尝试把 C:\WinNT\Win.INI 文件拷贝到 C:\ 下的代码,怎么写呢?
u 实验步骤(1):

向一个 Form 窗体上拖拽三个 Button 控件,三个控件的 text 属性分别设置为“复制文本文件”、“创建文本文件”、 “删除文本文件”。如图 3 3 所示:

3-3  文件操作界面

u 实验步骤(2):

双击“复制文本文件”、“创建文本文件”、“删除文本文件”,在 click 事件处理方法里分别添加代码如下:
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace FileOptionApplication

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        /// <summary>

        /// 复制文本文件

        /// </summary>

        private void button1_Click(object sender, EventArgs e)

        {

            string somefile = @"C:\Documents and Settings\Administrator\My Documents\SQL Server2000安装故障.txt";

            string target = @"c:\2.txt";

            if (!File.Exists(somefile))

            {

                MessageBox.Show("文件不存在!");

            }

            else

            {

                if (File.Exists(target))

                {

                    File.Delete(target);

                }

                File.Copy(somefile, target);

                MessageBox.Show("文件复制成功!");

            }

        }

         /// <summary>

        /// 创建文本文件

        /// </summary>

        private void button2_Click(object sender, EventArgs e)

        {

            string target = @"c:\2.txt";

            if (File.Exists(target))

            {

                File.Delete(target);

            }

            File.CreateText(target);

        }

        /// <summary>

        /// 删除文本文件

        /// </summary>

        private void button3_Click(object sender, EventArgs e)

        {

            string target = @"c:\2.txt";

            if (File.Exists(target))

            {

                File.Delete(target);

                MessageBox.Show("文件删除成功!");

            }

        }

    }

}

问题讨论:

刚才的实验我们是通过File类实现并完成任务的,那么此次我们通过更换FileInfo类执行同样的复制动作如何实现呢?请将button1_Click的代码替换为下列代码试试:

     private void button1_Click(object sender, EventArgs e)

        {

            string path = @"C:\WINDOWS\IE4 Error Log.txt";

            string target = @"c:\1.txt";

            FileInfo myfile = new FileInfo(path);

            if (!myfile.Exists)

            {

                MessageBox.Show("对不起,未发现路径文件!");

            }

            else

            {

                myfile.CopyTo(target);

                MessageBox.Show("复制成功!");

            }

       }

3案例学习:获取文件基本信息

本案例将解决,如何显示文件的基本信息问题。
u 实验步骤(1):

向一个 Form 窗体上拖拽三个 Lable 控件和一个 Button 控件, Button 控件的 text 属性设置为“获取文件信息”。如图 3 4 所示:

3-4  获取文件信息界面

u 实验步骤(2):

双击“获取文件信息”,在 click 事件处理方法里分别添加代码如下:
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

 

namespace FileOptionApplication

{

    public partial class Form2 : Form

    {

        public Form2()

        {

            InitializeComponent();

        }

         /// <summary>

        /// 获取文件信息单击事件

        /// </summary>

        private void button1_Click(object sender, EventArgs e)

        {

            string somefile = @"C:\Documents and Settings\Administrator\My Documents\SQL Server2000安装故障.txt";

            FileInfo myfile = new FileInfo(somefile);

            if (myfile.Exists)

            {

                MessageBox.Show("文件已经存在");

                label1.Text = "文件创建时间:" + myfile.CreationTime.ToString();

                label2.Text = "文件夹:" + myfile.Directory.ToString();

                label3.Text = "文件夹名称:" + myfile.DirectoryName.ToString() + ",文件扩展名:" + myfile.Extension.ToString();

            }

            else

            {

                MessageBox.Show("文件并不存在");

            }

        }

    }

}

问题讨论:

FileInfo 类和 File 类都可以实现上述操作,它们的方法也都非常相似,那么它们到底有什么区别呢?
n FileInfo 类和File类的比较

n 两者都提供对文件类似的操作。

n File 为静态类,直接使用;FileInfo需要实例化后才能使用 。

n 从性能上考虑,如果你要多次操作文件,不管是针对相同的,还是不同的,请使用FileInfo,说白了,单打独斗File最棒,群殴则首推FileInfo

n 每次通过File类调用某个方法时,都要占用一定的CPU,而FileInfo类只在创建FileInfo对象时执行一次安全检查。