科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道利用.NET Directory类轻松进行目录管理

利用.NET Directory类轻松进行目录管理

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

我们将为大家介绍利用Directory类处理路径中的目录部分。该类位于System.IO 命名空间。Directory类为我们提供了访问目录的方法。

作者:中国IT实验室 来源:中国IT实验室 2007年9月7日

关键字: 目录管理

  • 评论
  • 分享微博
  • 分享邮件
我们将为大家介绍利用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包含了用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类处理目录安全性问题。

列表A


 

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace TRDirectory {
class Program {
static void Main(string[] args) {
string testPath = "c:test";
if (Path.HasExtension(testPath)) {
Console.WriteLine("This is a file path, not a directory.");
}
else {
if (Directory.Exists(testPath)) {
Console.WriteLine("This directory already exists.");
}
else {
try {
Directory.CreateDirectory(testPath);
} catch (IOException ex) {
Console.WriteLine("Error creating directory  - ", testPath, ex.Message.ToString());
} }
if (Directory.Exists(testPath)) {
try {
Directory.Move(testPath, "c:techrepublic");
} catch (IOException ex) {
Console.WriteLine("Error moving directory  - ", testPath, ex.Message.ToString());
} }
if (Directory.Exists("c:techrepublic")) {
try {
Directory.Delete("c:techrepublic", true);
} catch (IOException ex) {
Console.WriteLine("Error deleting directory c:techrepublic - ", ex.Message.ToString());
} } } } } } 

列表B

Imports System.IO
Module Module1
Sub Main()
Dim testPath As String
testPath = "c:test"
If (Path.HasExtension(testPath)) Then
Console.WriteLine("This is a file path, not a directory.")
Else
If (Directory.Exists(testPath)) Then
Console.WriteLine("This directory already exists.")
Else
Try
Directory.CreateDirectory(testPath)
Catch ex As IOException
Console.WriteLine("Error creating directory - ", testPath, ex.Message.ToString())
End Try
If (Directory.Exists(testPath)) Then
Try
Directory.Move(testPath, "c:techrepublic")
Catch ex As IOException
Console.WriteLine("Error moving directory - ", testPath, ex.Message.ToString())
End Try
End If
If (Directory.Exists("c:techrepublic")) Then
Try
Directory.Delete("c:techrepublic", True)
Catch ex As IOException
Console.WriteLine("Error deleting directory c:techrepublic - ", ex.Message.ToString())
End Try
End If
End If
End If
End Sub
End Module 

列表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 

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
      邮件订阅

      如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

      重磅专题
      往期文章
      最新文章