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#成神之路》