类浏览
微软文档中说 Directory类提供了在目录和子目录中进行创建移动和列举操作的静态方法。此外,你还可以访问和操作各种各样的目录属性,例如创建或最后一次修改时间以及Windows访问控制列表等。
Directory类的一个重要方面是它的方法都是静态的,这意味着你可以直接调用它们而不用创建该类的一个实例。让我们从基本的方面开始Directory类之旅,包括创建、删除和移动目录。
基本方法
Directory类提供了各种目录处理的静态方法。这些静态方法对所有方法都执行安全性检查。我们将会介绍其中的大部分方法,第一组有目录处理的基本方法组成:
·CreateDirectory:可以用来创建目录或子目录。同时,还可以通过创建属性建立目录安全性检查。
·Delete:可以用来删除系统中指定的空目录。如果路径参数所指定的目录中包含文件或子目录,该方法将会抛出IOExceptin异常。
·Exists:可以此方法检测一个指定的路径是否存在。路径参数可以指定相对或绝对路径信息。相对路径信息解释为相对当前工作目录。
·Move:可用该方法移动文件或目录到一个新位置。它有两个参数:移动的文件或目录以及目的位置。
列表A中的C# Windows控制台应用程序使用这些方法来创建,移动和删除目录。整个代码中还使用了Exists方法来检查某个目录是否存在。所有对Directory类中方法的调用都封装在try/catch语句块中。代码从位于C盘的test目录开始,使用Path类来检测包含目录名的字符串中是否有文件扩展名,如果包含文件扩展名那么判断该字符串为一个文件路径,而不是目录程序终止。否则如果目录不存在那么将会创建该目录,接下来重命名目录为techrepublic,最后删除该目录。(列表B包含了用VB.NET实现的相同功能的代码)。
目录和它们的内容
一旦目录创建,通常我们需要详细了解它的内容或检查该目录。Directory类使得通过各种方法和属性访问目录信息和它的内容变得十分简单。下面的列表中列出了这些方法:
·GetCurrentDirectory:返回应用程序的当前工作目录。
·GetDirectories:返回指定目录的所有子目录列表,并用字符串数组存储。
·GetDirectoryRoot:对指定的路径返回磁盘信息,更目录信息或两者都有。
·GetFiles:返回指定目录范围内的所有文件名,存储在字符串数组中。
·GetFileSystemEntries:返回指定哪个目录范围内的文件名和目录,并存储在字符串数组中。
·GetParent:以字符串值返回指定路径的父目录,包括绝对路径和相对路径。
·GetLogicalDrives:以<盘符>:的形式返回字符串数组中计算机上的逻辑盘符。
列表C中的c#代码演示了这些方法的使用方法。基本上,该示例显示了有关当前应用目录、所有子目录和文件、根目录和当前系统上的所有逻辑盘符的所有信息。列表D包含了用VB.NET实现相同功能的代码。
日期和时间戳
通常,知道目录何时创建以及最后一次访问或修改时间是非常有用的。Directory类提供了处理日期和时间戳的方法,如下所示:
·GetCreationTime:获得目录创建的日期时间。
·GetLastAccessTime:返回指定文件或目录最后一次访问的日期时间。
·GetLastWriteTime:返回指定文件或目录最后一次写入的日期时间。
·SetCreationTime:设置指定文件或目录的创建日期和时间。
·SetLastAccessTime:设置指定文件或目录上次访问日期和时间。
·SetLastWriteTime:设置上次写入目录的日期和时间。
列表E中的C#代码列出了C盘中所有目录最后一次访问,修改和最初创建的日期和时间。并把每个目录的最后一次访问时间设置为当前日期和时间。列表F包含了VB.NET实现的相同功能的代码。
系统的其它方面
文件处理通常要访问目录并对其进行相关操作。System.IO命名空间的Directory类提供了创建和处理目录以及它的内容的所有功能。利用它我们确定文件何时被创建和最后一次访问时间等。
而且,系统管理员工作的一个重要方面是通过目录访问控制对系统资源的访问。下周,我们将介绍如何通过Directory类处理目录安全性问题。
列表C
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace TRDirectory { class Program { static void Main(string[] args) { string curDir; inti; try { curDir = Directory.GetCurrentDirectory(); Console.WriteLine("Current application directory: " + curDir); subDirs = Directory.GetDirectories(curDir); for (i = 0; i <= subDirs.GetUpperBound(0); i++) { Console.WriteLine("Subdirectory: " + subDirs[i]); } Console.WriteLine("Root info: " + Directory.GetDirectoryRoot(Directory.GetCurrentDirectory())); for (i = 0; i <= Directory.GetFileSystemEntries(curDir).GetUpperBound(0); i++){ Console.WriteLine("System entries: " + Directory.GetFileSystemEntries(curDir)[i]); } for (i = 0; i <= Directory.GetLogicalDrives().GetUpperBound(0); i++) { Console.WriteLine("Logical drives: " + Directory.GetLogicalDrives()[i]); } } catch (IOException e) { Console.WriteLine("Exception ", e.Message.ToString()); } } } } |
列表D
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace TRDirectory { class Program { static void Main(string[] args) { string[] subDirs; inti; DateTimedtCreated; DateTimedtAccessed; DateTimedtWrite; try { subDirs = Directory.GetDirectories("c:"); for (i = 0; i <= subDirs.GetUpperBound(0); i++) { dtCreated = Directory.GetCreationTime(subDirs[i]); dtAccessed = Directory.GetLastAccessTime(subDirs[i]); dtWrite = Directory.GetLastWriteTime(subDirs[i]); Console.WriteLine("Subdirectory ", subDirs[i]); Console.WriteLine("Created: ", dtCreated.ToString()); Console.WriteLine("Last accessed: ", dtAccessed.ToString()); Console.WriteLine("Last changed: ", dtWrite.ToString()); Directory.SetLastAccessTime(subDirs[i], DateTime.Now); } } catch (IOException e) { Console.WriteLine("Exception ", e.Message.ToString()); } } } } |
列表E
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace TRDirectory { class Program { static void Main(string[] args) { string[] subDirs; inti; DateTimedtCreated; DateTimedtAccessed; DateTimedtWrite; try { subDirs = Directory.GetDirectories("c:"); for (i = 0; i <= subDirs.GetUpperBound(0); i++) { dtCreated = Directory.GetCreationTime(subDirs[i]); dtAccessed = Directory.GetLastAccessTime(subDirs[i]); dtWrite = Directory.GetLastWriteTime(subDirs[i]); Console.WriteLine("Subdirectory ", subDirs[i]); Console.WriteLine("Created: ", dtCreated.ToString()); Console.WriteLine("Last accessed: ", dtAccessed.ToString()); Console.WriteLine("Last changed: ", dtWrite.ToString()); Directory.SetLastAccessTime(subDirs[i], DateTime.Now); } } catch (IOException e) { Console.WriteLine("Exception ", e.Message.ToString()); } } } } |
列表F
Imports System.IO Module Module1 Sub Main() Dim subDirs() As String Dim i As Integer Dim dtCreated As DateTime Dim dtAccessed As DateTime Dim dtWrite As DateTime Try subDirs = Directory.GetDirectories("c:") For i = 0 To subDirs.GetUpperBound(0) dtCreated = Directory.GetCreationTime(subDirs(i)) dtAccessed = Directory.GetLastAccessTime(subDirs(i)) dtWrite = Directory.GetLastWriteTime(subDirs(i)) Console.WriteLine("Subdirectory ", subDirs(i)) Console.WriteLine("Created: ", dtCreated.ToString()) Console.WriteLine("Last accessed: ", dtAccessed.ToString()) Console.WriteLine("Last changed: ", dtWrite.ToString()) Directory.SetLastAccessTime(subDirs(i), DateTime.Now) Next i Catch e As IOException Console.WriteLine("Exception ", e.Message.ToString()) End Try End Sub End Module |