第6章 目录与文件管理
System.Console.WriteLine(\路径为空引用\ }
catch (ArgumentException) {
System.Console.WriteLine(\路径是一个零长度字符串\ } }
//移动目录
void Move(string sourcePath, string destinationPath) {
try {
System.IO.Directory.Move(sourcePath, destinationPath); System.Console.WriteLine(\移动目录完成\ }
catch (ArgumentNullException) {
System.Console.WriteLine(\路径为空引用\ }
catch (System.Security.SecurityException) {
System.Console.WriteLine(\检测到安全性错误\ }
catch (ArgumentException) {
System.Console.WriteLine(\路径是一个零长度字符串\ }
catch (System.IO.IOException) {
System.Console.WriteLine(\试图将一个目录移到已存在的卷或目标\ } } } }
6.1.2 FolderBrowserDialog控件
VS2005提供了FolderBrowserDialog控件,用于显示用户选择文件夹的对话框。FolderBrowserDialog类属于System.Windows.Forms命名空间,无法继承该类。
调用FolderBrowserDialog类的ShowDialog方法,可以打开对话框,提示用户浏览、创建并最终选择一个文件夹。只能选择文件系统中的文件夹,不能选择虚拟文件夹。只允许用户选择文件夹而非文件。文件夹的浏览通过树控件完成。如果用户在对话框中单击【确定】按钮,则对话框返回结果为DialogResult.OK,否则为DialogResult.Cancel。 表6-3列出了FolderBrowserDialog控件的主要属性。
表6-3 FolderBrowserDialog控件的主要属性
属性名 Description RootFolder 含义 获取或设置对话框中在树视图控件上显示的说明文本 获取或设置从其开始浏览的根文件夹 152
第6章 目录与文件管理
SelectedPath Tag CanRaiseEvents 获取或设置用户选定的路径 获取或设置一个对象,该对象包含控件的数据(从CommonDialog继承) 获取一个指示组件是否可以引发事件的值(从Component继承) 表6-4列出了FolderBrowserDialog控件的主要方法。
表6-4 FolderBrowserDialog控件的主要成员方法
方法 Dispose Equals Reset ShowDialog GetService 说明 释放由 Component 占用的资源(从Component继承。) 确定两个Object实例是否相等(从Object继承。) 将属性重置为其默认值 运行通用对话框(从CommonDialog继承) 返回一个对象,该对象表示由Component或它的Container提供的服务(从Component继承) 通常在创建新的FolderBrowserDialog后,将RootFolder设置为开始浏览的位置。或者,
可将SelectedPath设置为最初选定的RootFolder子文件夹的绝对路径。也可以选择设置Description属性为用户提供附加说明。最后,调用ShowDialog方法将对话框显示给用户。如果该对话框关闭并且ShowDialog显示的对话框为DialogResult.OK,SelectedPath则是一个包含选定文件夹路径的字符串。
FolderBrowserDialog是模式对话框,因此,在对话框被显示时,不能对对话框以外的对象进行任何操作,即阻止应用程序其他部分的运行,直到用户选定了文件夹。
【例6-3】单击Windows窗体按钮,打开FolderBrowserDialog对话框。
(1) 启动VS2005,创建一个名为FolderBrowserDialog的Windows应用程序项目。
(2) 在Form1.cs的【设计】窗口中,将Form1的【Text】属性值改为“FolderBrowserDialog示例”。打开工具箱,如图6-1所示,在“对话框”选项卡中选择FolderBrowserDialog控件,将其拖入到Form1窗体中。
图6-1 工具箱
图6-2 Form1设计窗体
(3) 在Form1窗体中,使用工具箱,展开“所有Windows窗体”选项卡,依次添加标签控件label1、文本框控件textBox1、按钮控件button1,然后修改对应的Text属性,界面效果
153
第6章 目录与文件管理
如图6-2所示。
(4) 双击【打开文件夹】按钮,添加对应的Click事件代码:
private void button1_Click(object sender, EventArgs e) {
DialogResult result = folderBrowserDialog1.ShowDialog(); if (result == DialogResult.OK) {
textBox1.Text = folderBrowserDialog1.SelectedPath; } else {
textBox1.Text = \ } }
(5) 按
图6-3 浏览文件夹 图6-4 例6-3的运行结果
6.2 文件管理
File类和FileInfo类为FileStream对象的创建和文件的创建、复制、移动、删除、打开等提供了支持。使用File类和FileInfo类对文件进行操作时,用户必须具备相应的权限,如读、写等权限,否则将会引发异常。
FileInfo类与File类均能完成对文件的操作,不同点在于FileInfo类必须被实例化,并且每个FileInfo的实例必须对应于系统中一个实际存在的文件。由于所有File类提供的方法都是静态的,所以如果只想执行一个操作,那么使用File方法的效率比使用相应的FileInfo实例方法可能更高。如果打算多次重用某个对象,可考虑使用FileInfo的实例方法,而不是File类的相应静态方法。
154
第6章 目录与文件管理
6.2.1 文件复制、删除与移动
File类和FileInfo类属于System.IO命名空间,提供了文件管理操作,本节仅介绍File类。
1.文件复制
File类的Copy方法用于将现有文件复制到新文件。方法原型为:
public static void Copy (string sourceFileName,string destFileName)
其中参数sourceFileName为要复制的文件;destFileName为目标文件的名称,它不能是一个目录或现有文件。
【例6-4】将文件复制到指定路径。
using System; using System.IO; class Test {
public static void Main() {
string path = @\ string path2 = @\ try {
File.Delete(path2); File.Copy(path, path2);
Console.WriteLine(\复制到{1}\ //再次复制相同的文件,操作失败 File.Copy(path, path2);
Console.WriteLine(\再次复制相同的文件,操作失败\ }
catch (Exception e) {
Console.WriteLine(\不允许进行二次复制\ Console.WriteLine(e.ToString()); } } }
2.文件删除
File类的Delete方法用于删除指定的文件。如果指定的文件不存在,则不引发异常。 方法原型为:
public static void Delete (string path)
参数path为要删除的文件的名称。
【例6-5】删除C:\\MyDir目录下的所有文件。
using System; using System.IO; class FileTest {
public static void Main() {
Console.WriteLine(\确定要删除指定目录下的所有文件?\ Console.WriteLine(\点击'Y' 键继续,任意键取消\
155
第6章 目录与文件管理
int a = Console.Read(); if(a == 'Y' || a == 'y') {
Console.WriteLine(\正在删除文件...\ } else {
Console.WriteLine(\操作被取消\ return; }
DirectoryInfo dir = new DirectoryInfo(@\ foreach (FileInfo f in dir.GetFiles()) {
f.Delete(); } } }
值得一提的是,使用File.Delete方法时,文件删除后在Windows的回收站中找不到,但是使用Norton Unerase Wizard或者其他工具软件却能成功地找到并恢复被删除的文件。由于File.Delete方法并不是彻底地抹去文件的内容,而只是对被删除的文件做出某个标记,因此如果在删除之后没有重新向文件所在的介质中写入新内容,则除了文件名的第一个字符无法恢复外,其它部分都能完整地恢复。
3.文件移动
File类的Move方法用于将指定文件移到新位置,并提供指定新文件名的选项。方法原型为:
public static void Move (string sourceFileName, string destFileName)
参数sourceFileName为要移动的文件名称,destFileName为文件的新路径。
【例6-6】移动一个文件。
using System; using System.IO; class Test {
public static void Main() {
string path = @\ string path2 = @\ try {
if (!File.Exists(path)) {
FileStream fs = File.Create(path); fs.Close(); }
if (File.Exists(path2)) {
File.Delete(path2); }
//移动文件
156
第06章 目录与文件管理



