C#成魔之路<9>文件及数据流技术(2)

1、文件夹基本操作

对文件家操作的时候,主要用到了.NET库中所提供的Directory类和DirectoryInfo类,而常见的文件夹操作主要有一下几种方式:判断文件夹是否存在,创建文件夹,移动文件夹,删除文件夹,以及遍历文件夹。

(1)Directory类和DirectoryInfo类
Directory类和DirectoryInfo类都可以对文件夹进行创建、移动、浏览目录以及其子目录等操作,下面对这两个类进行相关的介绍。

Directory类:
用于文件夹的典型操作。复制,移动,重命名,创建和删除。也可以用于获取和设置和目录的创建、访问以及写入操作相关的dateTime信息。
CreateDirectory:创建指定路径中的所有目录。
Delete:删除指定的目录。
Exists:确定给定路径是否引用磁盘上的现有目录。
GetCreationTime:获取目录的创建日期和时间。
GetCurrentDirectory:获取应用程序的当前工作目录。
GetDirectories:获取指定目录中子目录的名称。
GetFiles:返回指定目录中的文件的名称。
GetFileSystemEntries:返回指定目录中所有文件和子目录名称。
GetLastAccessTime:返回上次访问指定文件或目录的日期和时间。
GetLastWriteTime:返回上次访问指定文件或目录的日期和时间。
GetLogicalDrives:检索这个计算机上格式为“<驱动器号>:\”的逻辑驱动器名称
GetParent:检索指定路径的父目录,包括绝对路径和相对路径。
Move:将文件或目录及其内容移到新位置。
SetCreationTime:为指定的文件或目录设置创建日期和时间。
SetCurrentDirectory:将应用程序的当前工作目录设定为指定的目录。
SetLastAccessTime:设置上次访问指定文件或目录的日期和时间。
SetLastWriteTime:设置上次写入目录的日期和日期。

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == string.Empty)
            {
                MessageBox.Show("文件夹名称不能为空");
            }
            else
            {
                if (Directory.Exists(textBox1.Text))
                {
                    MessageBox.Show("这个文件夹已经存在");
                }
                else
                {
                    Directory.CreateDirectory(textBox1.Text);
                    //使用Directory类的CreateDirectory方法创建文件夹
                }
            }
        }
    }

2、DirectoryInfo类
DirectoryInfo类和Directory类之间的关系与FileInfo类和File类之间的关系十分类似。
关于DirectoryInfo类的相关属性:
Attributes:获取或设置当前Filesysteminfo的Fileattributes。
CreationTime:获取或设置当前FileSystemInfo对象的创建时间。
Exists:获取指定目录是否存在的值。
FullName:获取目录或者文件的完整目录。
Parent:获取指定子目录的父目录。
Name:获取DirectoryInfo实例的名称。
相关其他方法和Directory一样。

示例程序:利用DirectoryInfo类重写上面的示例程序。

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == string.Empty)
            {
                MessageBox.Show("文件夹名称不能为空");
            }
            else
            {
                DirectoryInfo f = new DirectoryInfo(textBox1.Text);
                if (f.Exists)
                {
                    MessageBox.Show("这个文件夹已经存在");
                }
                else
                {
                    f.Create();
                    //使用Directory类的CreateDirectory方法创建文件夹
                }
            }
        }
    }

(2)判断文件夹是否存在
Directory类:
确定给定路径是否引用磁盘上的现有目录:

public static bool Exists(string path)
//path表示要测试的路径。返回值表示,如果path引用现有目录,则为true否则为false

DirectoryInfo类:
获取指定目录是否存在的值。

public override bool Exists{get;}
//如果存在,则为true,否则为false。

具体事例见上面的示例程序。

(3)创建文件夹
Directory类:
该方法为可重载方法,有以下两种形式:

public static DirectoryInfo CreateDirectory(string path)
public static DirectoryInfo CreateDirectory(string path,DirectorySecurity directorySecurity)
//directorySecurity表示应用于此目录的访问控制。

注意:参数path中的目录已经存在或者path某些部分无效,将发生异常。参数path指定目录路径,而不是文件路径。

Directory.CreateDirectory("C:\\Test");

DirectoryInfo类:
分为两种形式:

public void Create()
public void Create(DirectorySecurity directorySecurity)
//directorySecurity表示应用于此目录的访问控制。

示例程序:

DirectoryInfo f=new DirectoryInfo("C:\\Test");
f.Create();

(4)移动文件夹:

Directory类:
Move方法是将文件或目录及其内容移动到新位置:

public static void Move(string sourceDirName,string destDirName)
//参数 sourceDirName表示要移动的文件或目录的路径。参数destDirName表示指向sourceDirName的新位置的路径。

示例:

Directory.Move("C:\\test","C:\\x\\test");
//移动文件夹
Directory.Move("C:\\test","C:\\test1");
//文件夹名称进行改变

注意:Move方法移动文件夹的时候需要统一磁盘根目录。使用MoveTo方法移动文件夹的时候也是如此。

DirectoryInfo类:

MoveTo方法是将DirectoryInfo对象及其内容移动到新路径。

public void MoveTo(string destDirName)
//参数destDirName表示要将此目录移动到的目标位置的名称和路径,目标不能是另一个具有相同名称的磁盘卷或目录,它可以是要将此目录作为子目录添加到其中的一个现有目录。。

示例:

DirectoryInfo d=new DirectoryInfo("C:\\Test");
d.MoveTo("C:\\s\\Test");

(5)删除文件夹

Directory类:
Directory类的Delete方法为可重载方法。

public static void Delete(string path);
public static void Delete(string path,bool recursive)
//recursive参数表示,要移除path中的目录子目录和文件,则为true,否则为false

示例:

Directory.Delete("C:\\Test");//删除文件夹
Directory.Delete("C:\\Test",True);//删除文件夹机器所有的子文件夹

DirectoryInfo类:
DirectoryInfo类中的Delete方法是永久删除文件,有以下两种重载形式:

public override void Delete()
public override void Delete(bool recursive)
//recursive参数表示,要移除path中的目录子目录和文件,则为true,否则为false

示例:

DirectoryInfo d=new DirectoryInfo("C:\\Test");
d.Delete(true);

(6)遍历文件夹
遍历文件夹时,可以分别使用DirectoryInfo类提供的GetDirectories方法,GetFiles方法和GetFileSystemInfos方法。

GetDirectories方法:
用来返回当前目录的子目录。该方法为可重载方法,有以下三种重载形式:

public DirectoryInfo[] GetDirectories()
public DirectoryInfo[] GetDirectories(string searchPatten)
public DirectoryInfo[] GetDirectories(string searchPatten,SearchOption searchOption)

searchPatten参数表示搜索字符串,如用于搜索所有以单词System开头的目录的“System*”。参数searchOption表示SearchOption的枚举的一个值,指定搜索操作是应仅包含当前目录还是应该包含所有子目录。他们都返回DirectoryInfo类型的数组。

GetFiles方法:
返回当前目录的文件列表。该方法为可重载方法,有三种重载形式:

public FileInfo[] GetFile()
public FileInfo[] GetFile(string searchPatten)
public FileInfo[] GetFile(string searchPatten,SearchOption searchOption)
//参数searchPatten表示搜索字符串:"*.txt"。参数searchOption是SearchOption的枚举值,指定搜索操作是仅仅包含当前目录还是应该包含所有子目录。返回值为FileInfo类型数组。

GetFileSystemInfos方法
检索表示当前目录的文件和子目录的强类型FileSystemInfo对象的数组。该方法可被重载:

public FileSystemInfo[] GetFileSystemInfos()
public FileSystemInfo[] GetFileSystemInfos(string searchPattern)
//searchPattern表示搜索字符串。

注意:一般遍历文件都选择GetFileSystemInfos方法,因为GetDirectories方法只遍历文件夹中的子文件夹。GetFiles方法值遍历文件夹中的文件,而GetFileSystemInfos方法遍历文件夹中的所有子文件夹以及文件。

示例程序:
注意:在进行写代码之前要添加folderBrowserDialog组件

  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();//清空上一次的组件相关内容
            if (folderBrowserDialog1 .ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = folderBrowserDialog1.SelectedPath;
                DirectoryInfo d = new DirectoryInfo(textBox1.Text);
                //创建相关的对象
                FileSystemInfo[] f = d.GetFileSystemInfos();
                //使其得到目录下诸多对象的数组集合。
                foreach (FileSystemInfo k in f)
                {
                //如果k是文件的话
                    if (k is DirectoryInfo)//注意其判断值的方法
                    {
                    //利用文件的方式得到相关的诸多属性
                        DirectoryInfo k1 = new DirectoryInfo(k.FullName);
                        listView1.Items.Add(k.Name);
                        //添加到诸多相关子项之下
                        listView1.Items[listView1.Items.Count - 1].SubItems.Add(k1.FullName);
                        listView1.Items[listView1.Items.Count - 1].SubItems.Add(" ");
                        listView1.Items[listView1.Items.Count - 1].SubItems.Add(k1.CreationTime.ToShortDateString());
                    }
                    else
                    {
                    //如果k是文件的话
                        FileInfo f1 = new FileInfo(k.FullName);

                        listView1.Items.Add(k.Name);
                        listView1.Items[listView1.Items.Count-1].SubItems.Add(f1.FullName);
                        listView1.Items[listView1.Items.Count - 1].SubItems.Add(f1.Length.ToString());
                        listView1.Items[listView1.Items.Count - 1].SubItems.Add(f1.CreationTime.ToShortDateString());
                    }
                }
            }
        }


    }

注意:在写代码之前要调试好相关listView属性,添加好适当的项。具体请参考《C#成神之路》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值