首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

16.3  使用DirectoryInfo类型

我们首先要讨论的用于I/O的类型是DirectoryInfo类。它包含一组用来创建、移动、删除和枚举所有目录/子目录的成员。表16-3列举了除了它的基类(FileSystemInfo)提供的功能外的一些成员。

16-3  DirectoryInfo类型的主要成员

   

   

Create()

CreateSubdirectory()

按照路径名建立一个目录(或者一组子目录)

Delete()

删除一个目录和它的所有内容

GetDirectories()

返回一个表示当前目录中所有子目录的字符串数组

GetFiles()

返回FileInfo类型的数组,表示指定目录下的一组文件

MoveTo()

将一个目录及其内容移动到一个新的路径

Parent

获取指定路径的父目录

Root

获取路径的根部分

 

我们首先指定一个特别的目录路径作为构造函数的参数。如果需要访问当前应用程序目录的话(比如执行的应用程序的目录),可以使用“.”符号。下面是一些例子:

 

// 绑定到当前的应用程序目录。

DirectoryInfo dir1 = new DirectoryInfo(".");

 

// 使用verbatim字符串绑定到C:\Windows

DirectoryInfo dir2 = new DirectoryInfo(@"C:\Windows");

 

在第二个例子中,必须确保传入构造函数的路径(C:\Windows)是在物理计算机上存在的。然而如果试图使用一个不存在的目录,系统会抛出System.IO.DirectoryNotFoundException异常。因此,如果指定了一个尚未创建的目录的话,在对目录进行操作前首先需要调用Create()方法。

 

// 绑定到一个不存在的目录,然后创建它。

DirectoryInfo dir3 = new DirectoryInfo(@"C:\Windows\Testing");

dir3.Create();

 

创建了DirectoryInfo对象后,就能使用任何一个派生自FileSystemInfo的属性来获取基层目录的内容。例如,下面这个类创建了一个新的DirectoryInfo对象并且映射到C:\Windows(如果需要的话,可以调整路径),然后显示许多相关的统计信息(输出结果如图16-2所示):

 

class Program

{

  static void Main(string[] args)

  {

    Console.WriteLine("***** Fun with Directory(Info) *****\n");

    DirectoryInfo dir = new DirectoryInfo(@"C:\Windows");

 

        // 打印目录信息。

    Console.WriteLine("***** Directory Info *****");

    Console.WriteLine("FullName: {0} ", dir.FullName);

    Console.WriteLine("Name: {0} ", dir.Name);

    Console.WriteLine("Parent: {0} ", dir.Parent);

    Console.WriteLine("Creation: {0} ", dir.CreationTime);

    Console.WriteLine("Attributes: {0} ", dir.Attributes);

    Console.WriteLine("Root: {0} ", dir.Root);

    Console.WriteLine("**************************\n");

  }

}

 

16-2  Windows目录的信息

16.3.1  FileAttributes枚举

FileSystemInfoAttributes属性指示了当前目录或文件的各种特性,它们都由FileAttributes枚举类表示。其实这个名字本身就描述了它的意思,这里列出了一些相对比较难理解的枚举(参考.NET Framework 2.0 SDK文档获知所有细节):

 

public enum FileAttributes

{

  ReadOnly,

  Hidden,

    // 文件是操作系统的一部分或由操作系统以独占方式使用。

  System,

  Directory,

  Archive,

    // 保留供将来使用。

  Device,

    // 文件正常,没有设置其他的特性。

  Normal,

  Temporary,

    // 稀疏文件通常是数据多为零的大文件。

  SparseFile,

    // 一个与文件或目录相关联的由用户定义的数据块。

  ReparsePoint,

  Compressed,

  Offline,

    // 操作系统的内容索引服务不会创建此类型文件的索引。

  NotContentIndexed,

  Encrypted

}

 

16.3.2  使用DirectoryInfo类型列出文件

除了获取已存在目录的基本信息外,我们还能使用DirectoryInfo类型的一些方法来扩展当前的例子。首先,使用GetFiles()方法来获取C:\Windows目录下的所有*.bmp文件。这个方法返回FileInfo类型的数组,每个FileInfo类型都包含了一个文件的细节(有关FileInfo类型的详细内容在本章的后面进行讨论)。

 

class Program

{

  static void Main(string[] args)

  {

    Console.WriteLine("***** Fun with Directory(Info) *****\n");

    DirectoryInfo dir = new DirectoryInfo(@"C:\Windows");

    ...

        // 获取所有.bmp扩展名的文件。

    FileInfo[] bitmapFiles = dir.GetFiles("*.bmp");

 

文本框:  
图16-3  位图文件信息

    // 我们找到多少文件?

  Console.WriteLine("Found {0}  *.bmp files\n", bitmapFiles.Length);

 

        // 输出每个文件的信息。

    foreach (FileInfo f in bitmapFiles)

    {

      Console.WriteLine("***************************\n");

      Console.WriteLine("File name: {0} ", f.Name);

      Console.WriteLine("File size: {0} ", f.Length);

      Console.WriteLine("Creation: {0} ", f.CreationTime);

      Console.WriteLine("Attributes: {0} ", f.Attributes);

      Console.WriteLine("***************************\n");

    }

  }

}

 

运行程序后会发现程序的结果和图16-3类似(读者的这些位图文件可能会不同)。

16.3.3  使用DirectoryInfo类型创建子目录

我们能使用DirectoryInfo.CreateSubdirectory()方法以编程方式扩展目录结构。使用这个方法可以建立一个子目录,也可以一次建立多个嵌套子目录。例如,下面这段代码通过建立一些自定义子目录来扩展C:\Windows的目录结构:

 

class Program

{

  static void Main(string[] args)

  {

    Console.WriteLine("***** Fun with Directory(Info) *****\n");

    DirectoryInfo dir = new DirectoryInfo(@"C:\Windows");

    ...

        // 在初始目录下创建\MyFoo

    dir.CreateSubdirectory("MyFoo");

 

        // 在初始目录下创建\MyBar\MyQaaz

    dir.CreateSubdirectory(@"MyBar\MyQaaz");

  }

}

 

如果使用Windows ExplorerWindows资源管理器)来检查Windows目录,会发现这些子目录已被成功创建(如图16-4所示)。

尽管不一定要去捕获CreateSubdirectory()方法的返回值,但是需要知道的是,如果执行成功,它会返回表示新建项的DirectoryInfo类型。

 

// CreateSubdirectory()返回了一个表示新建项的DirectoryInfo类型。

DirectoryInfo d = dir.CreateSubdirectory("MyFoo");

Console.WriteLine("Created: {0} ", d.FullName);

 

d = dir. CreateSubdirectory(@"MyBar\MyQaaz");

Console.WriteLine("Created: {0} ", d.FullName);

16-4  创建子目录

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论