前言
在開發應用程序過程中,對操作系統上的文件夾存儲文件和子文件夾操作是常見的需求。.NET中的Directory類提供了處理文件目錄的功能。本文介紹如何讀取文件夾的屬性、獲取文件夾的大小及文件個數、創建文件夾、遍歷文件夾中的所有文件、移動文件夾和刪除文件夾等常見基礎操作。
Directory類提供了用于創建、復制、移動和刪除目錄和子目錄的靜態方法。在使用前,我們需要導入System.IO命名空間。
基礎操作
1、校驗目錄是否存
Exists方法是判斷指定的文件目錄是否存在。下面是校驗目錄是否存的代碼段:
string path = @"C:\Temp";
if (!Directory.Exists(path))
{
}
2、創建文件目錄
CreateDirectory方法是在指定路徑中創建具有指定安全性的目錄或文件夾。如果文件目錄是在系統盤(如C:),我們的應用程序需要以管理員權限運行。下面是創建文件目錄的代碼段:
string path = @"C:\Temp";
string subPath = @"C:\Temp\test";
if (!Directory.Exists(path))
{
// 創建目錄
Directory.CreateDirectory(path);
}
// 校驗目錄是否存在,如果不存在則創建
if (!Directory.Exists(subPath))
{
// 創建子目錄
Directory.CreateDirectory(subPath);
}
3、刪除文件目錄
Delete方法是從指定路徑中永久刪除空文件目錄,如果文件夾包含子文件夾和文件,則必須先刪除它們,然后才能刪除文件夾。下面是刪除文件目錄的代碼段:
// 校驗目錄是否存在,如果存在才執行刪除
if (Directory.Exists(subPath))
{
// 刪除目錄 【非空目錄報錯】
Directory.Delete(subPath);
}
// 校驗目錄是否存在,如果存在才執行刪除
if (Directory.Exists(subPath))
{
// 刪除目錄 及所有子目錄與文件
Directory.Delete(subPath,true);
}
4、移動文件目錄
Move方法將現有目錄移動到具有完整路徑的新指定目錄,它有原目錄與目標目錄兩個參數。下面是移動文件目錄的代碼段:
string sourcePath = @"C:\Temp\test";
string destPath = @"C:\Temp\dest";
try
{
Directory.Move(sourcePath, destPath);
}
catch (IOException ex)
{
Console.WriteLine(ex.Message);
}
5、復制文件目錄
下面是復制文件目錄代碼段:
public class DirectoryExtend
{
/// <summary>
/// 復制目錄
/// </summary>
/// <param name="source"></param>
/// <param name="target"></param>
public static void Copy(string source, string target)
{
try
{
if (!Directory.Exists(source))
{
throw new DirectoryNotFoundException($"復制原目錄不存在: {source}");
}
// 如果目標目錄不存在,則創建
if (!Directory.Exists(target))
{
Directory.CreateDirectory(target);
}
DirectoryInfo sourceDirectory = new DirectoryInfo(source);
DirectoryInfo[] subDirectorys = sourceDirectory.GetDirectories();
// 獲取目錄中的文件并將其復制到新位置
FileInfo[] files = sourceDirectory.GetFiles();
foreach (FileInfo file in files)
{
string tempPath = Path.Combine(target, file.Name);
file.CopyTo(tempPath, false);
}
// 如果要復制子目錄,請將它們及其內容復制到新位置
foreach (DirectoryInfo sub in subDirectorys)
{
string tempPath = Path.Combine(target, sub.Name);
Copy(sub.FullName, tempPath);
}
}
catc h(Exception ex)
{
throw ex;
}
}
}
string sourcePath = @"C:\Temp\test";
string destPath = @"C:\Temp\dest";
DirectoryExtend.Copy(sourcePath, destPath);
6、獲取和設置目錄創建時間
SetCreationTime和GetCreationTime方法用于設置和獲取指定目錄的創建日期和時間。下面是獲取和設置目錄創建時間的代碼段:
// 設置目錄創建時間
DateTime dateTime= Directory.GetCreationTime(path);
Console.WriteLine(dateTime.ToString("yyyy-MM-dd HH:mm:ss"));
// 注意,如果目錄被打開,則修改失敗,會提示異常
// 獲取和設置目錄創建時間
Directory.SetCreationTime(path, DateTime.Now);
7、獲取和設置目錄上次訪問時間
SetLastAccessTime和GetLastAccessTime方法用于設置和獲取指定目錄的上次訪問日期和時間。下面是獲取和設置目錄上次訪問時間的代碼段:
DateTime dateTime = Directory.GetLastAccessTime(path);
Console.WriteLine(dateTime.ToString("yyyy-MM-dd HH:mm:ss"));
// 獲取目錄上次訪問時間
Directory.SetLastAccessTime(path, DateTime.Now);
8、獲取和設置目錄上次寫入時間
SetLastWriteTime和GetLastWriteTime方法用于設置和獲取指定目錄的上次寫入日期和時間。下面是設置和獲取目錄的上次寫入日期和時間的代碼段。
DateTime dateTime = Directory.GetLastWriteTime(path);
// 設置指定目錄的上次寫入日期和時間
Directory.SetLastWriteTime(path, DateTime.Now);
9、枚舉目錄
EnumerateDirectories方法返回指定目錄中目錄名稱的可枚舉集合,下面是枚舉目錄的代碼段:var dirs = from dir in
Directory.EnumerateDirectories(path)
select dir;
Console.WriteLine("目錄數: {0}", dirs.Count<string>().ToString());
// 遍歷子目錄
foreach (var dir in dirs)
{
Console.WriteLine("{0}", dir.Substring(dir.LastIndexOf("\\") + 1));
}
10、獲取并設置當前目錄
SetCurrentDirectory和 GetCurrentDirectory方法是指定的目錄設置為當前目錄和返回當前目錄。下面是獲取和設置當前目錄的代碼段:
Directory.SetCurrentDirectory(path);
// 獲取當前目錄
Console.WriteLine(Directory.GetCurrentDirectory());
11、獲取子目錄
GetDirectories 方法加載目錄的所有子目錄。要獲取所有子目錄,我們需要遞歸讀取子目錄。下面是獲取子目錄的代碼段:
string[] subdirectorys = Directory.GetDirectories(path);
/// <summary>
///
/// </summary>
/// <param name="directory"></param>
public static void GetSubDirectories(string directory)
{
string[] subdirectoryEntries = Directory.GetDirectories(directory);
// 循環查看它們是否有其他子目錄
foreach (string subdirectory in subdirectoryEntries)
{
LoadSubDirectorys(subdirectory);
}
}
/// <summary>
///
/// </summary>
/// <param name="directory"></param>
private static void LoadSubDirectorys(string directory)
{
Console.WriteLine(directory);
string[] subDirectorys = Directory.GetDirectories(directory);
foreach (string subdirectory in subDirectorys)
{
LoadSubDirectorys(subdirectory);
}
}
12、獲取目錄中的文件
GetFiles 方法獲取指定目錄中的文件列表,下面是獲取目錄中的文件的代碼段:string path = @"C:\Temp";
string[] files= Directory.GetFiles(path);
foreach (string fileName in files)
{
Console.WriteLine(fileName);
}
13、獲取根目錄
GetRootDirecoty 方法返回指定目錄的根目錄,下面是獲取根目錄的代碼段:string path = @"C:\Temp";
string root = Path.GetDirectoryName(path);
Console.WriteLine(root);
14、所有驅動器
GetLogicalDrives 方法返回系統上的所有邏輯驅動器,下面是獲取所有驅動器的代碼段:string[] drives = System.IO.Directory.GetLogicalDrives();
foreach (string drive in drives)
{
Console.WriteLine(drive);
}
小結
以上是關于 Directory 類實現目錄操作的內容,希望本文對您有所收獲,如有不到之處,請多多包涵。
該文章在 2024/12/19 17:46:14 編輯過