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