<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # C# 目錄教程 > 原文: [https://zetcode.com/csharp/directory/](https://zetcode.com/csharp/directory/) C# 目錄教程顯示了如何使用 C# 中的目錄。 在我們的示例中,我們創建目錄,刪除目錄,列出目錄或獲取其權限。 ## 目錄定義 目錄,也稱為文件夾,是在計算機上存儲文件的位置。 除文件外,目錄還存儲其他目錄或快捷方式。 在 C# 中,我們可以使用`Directory`或`DirectoryInfo`處理目錄。 `Directory`是一個靜態類,提供用于處理目錄的靜態方法。 `DirectoryInfo`的實例提供有關特定目錄的信息。 這些類在`System.IO`命名空間中可用。 ## C# 創建目錄 使用`Directory.CreateDirectory()`方法創建目錄。 `Program.cs` ```cs using System; using System.IO; namespace CreatingDirectory { class Program { static void Main(string[] args) { var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var dirName = $@"{docPath}\test"; DirectoryInfo di = Directory.CreateDirectory(dirName); Console.WriteLine($"Full name: {di.FullName}, Name: {di.Name}, Parent: {di.Parent}"); if (Directory.Exists(dirName)) { Console.WriteLine("Directory exists"); } else { Console.WriteLine("Directory does not exist"); } } } } ``` 該示例在用戶的`Documents`目錄中創建一個新的`test`目錄。 ```cs var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); ``` 我們用`Environment.GetFolderPath()`方法確定`MyDocuments`目錄路徑。 ```cs var dirName = $@"{docPath}\test"; ``` 這是要創建的目錄的完整路徑。 ```cs DirectoryInfo di = Directory.CreateDirectory(dirName); Console.WriteLine($"Full name: {di.FullName}, Name: {di.Name}, Parent: {di.Parent}"); ``` `Directory.CreateDirectory()`創建一個新目錄并返回`DirectoryInfo`,它代表指定路徑下的目錄。 從目錄信息對象中,我們打印目錄的全名,名稱和父目錄。 ```cs if (Directory.Exists(dirName)) { Console.WriteLine("Directory exists"); } else { Console.WriteLine("Directory does not exist"); } ``` 使用`Directory.Exists()`方法,我們可以確定指定的目錄是否存在。 ## C# 獲取當前目錄 `Directory.GetCurrentDirectory()`獲取應用的當前工作目錄。 `Program.cs` ```cs using System; using System.IO; namespace CurrentDirectory { class Program { static void Main(string[] args) { var curDir = Directory.GetCurrentDirectory(); Console.WriteLine(curDir); Console.WriteLine(Directory.GetDirectoryRoot(curDir)); } } } ``` 該程序將打印當前的工作目錄(運行程序的目錄)及其根目錄。 根由`Directory.GetDirectoryRoot()`確定。 ```cs $ dotnet run C:\Users\Jano\Documents\csharp\directory\CurrentDirectory C:\ ``` 這是輸出。 ## C# 刪除目錄 使用`Directory.Delete()`方法刪除目錄。 `Program.cs` ```cs using System; using System.IO; namespace DeleteDirectory { class Program { static void Main(string[] args) { var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var myDir = $@"{docPath}/test3"; Directory.CreateDirectory(myDir); Console.WriteLine(Directory.Exists(myDir)); Directory.Delete(myDir); Console.WriteLine(Directory.Exists(myDir)); } } } ``` 該示例創建一個新目錄,檢查它的存在,將其刪除,最后再次檢查它的存在。 ```cs $ dotnet run True False ``` This is the output. ## C# 移動目錄 `Directory.Move()`移動(重命名)目錄。 `Program.cs` ```cs using System; using System.IO; namespace MoveDirectory { class Program { static void Main(string[] args) { var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var sourceDir = $@"{docPath}\test"; var destDir = $@"{docPath}\test2"; Directory.Move(sourceDir, destDir); } } } ``` 該示例重命名目錄。 ```cs Directory.Move(sourceDir, destDir); ``` `Directory.Move()`方法的參數是:源目錄和目標目錄。 ## C# 列出驅動器 `Directory.GetLogicalDrives()`以`<drive letter>:\`的形式檢索計算機上邏輯驅動器的名稱。 `Program.cs` ```cs using System; using System.IO; namespace ListDrives { class Program { static void Main(string[] args) { string[] drives = Directory.GetLogicalDrives(); foreach (string drive in drives) { System.Console.WriteLine(drive); } } } } ``` 該示例列出了計算機上的所有驅動器。 ## C# 列出目錄 `Directory.GetDirectories()`返回子目錄的名稱。 子目錄可能符合可選的指定條件。 `Program.cs` ```cs using System; using System.IO; namespace ListDirectories { class Program { static void Main(string[] args) { var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string[] myDirs = Directory.GetDirectories(docPath); Console.WriteLine("Directories:"); foreach (var myDir in myDirs) { Console.WriteLine(myDir); } } } } ``` 該示例列出了指定目錄的所有子目錄。 在下一個示例中,我們為列出的目錄指定一些條件。 `Program.cs` ```cs using System; using System.IO; namespace ListDirectories2 { class Program { static void Main(string[] args) { var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); Console.WriteLine(docPath); string[] myDirs = Directory.GetDirectories(docPath, "w*", SearchOption.TopDirectoryOnly); Console.WriteLine("Directories:"); foreach (var myDir in myDirs) { Console.WriteLine(myDir); } } } } ``` 該示例列出了所有以`w`字符開頭的目錄。 ```cs string[] myDirs = Directory.GetDirectories(docPath, "w*", SearchOption.TopDirectoryOnly); ``` `Directory.GetDirectories()`的第一個參數是要列出的目錄。 第二個參數是與要列出的子目錄名稱匹配的搜索字符串。 第三個參數指定搜索操作應包含所有子目錄還是僅包含當前目錄。 ## C# 列出文件 `Directory.GetFiles()`返回符合(可選)條件的文件名。 `Program.cs` ```cs using System; using System.IO; namespace ListFiles { class Program { static void Main(string[] args) { var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string[] myFiles = Directory.GetFiles(docPath); Console.WriteLine("Files:"); foreach (var myFile in myFiles) { Console.WriteLine(myFile); } } } } ``` 該示例列出了用戶`Documents`目錄中的所有文件。 ## C# 目錄時間 `Directory.GetCreationTime()`獲取目錄的創建日期和時間。 `Directory.GetLastAccessTime()`獲取上次訪問指定文件或目錄的日期和時間。 `Directory.GetLastWriteTime()`獲取指定文件或目錄的最后寫入日期和時間。 `Program.cs` ```cs using System; using System.IO; namespace GetTimes { class Program { static void Main(string[] args) { var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var myDir = $@"{docPath}\test"; var creationTime = Directory.GetCreationTime(myDir); var lastAccessTime = Directory.GetLastAccessTime(myDir); var lastWriteTime = Directory.GetLastWriteTime(myDir); Console.WriteLine($"Creation time: {creationTime}"); Console.WriteLine($"Last access time: {lastAccessTime}"); Console.WriteLine($"Last write time: {lastWriteTime}"); } } } ``` 該示例打印指定目錄的創建時間,上次訪問時間和上次寫入時間。 ## C# 列出條目 `Directory.GetFileSystemEntries()`返回滿足指定條件的所有文件和子目錄的名稱。 `Program.cs` ```cs using System; using System.IO; namespace ListEntries { class Program { static void Main(string[] args) { var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string[] entries = Directory.GetFileSystemEntries(docPath, "w*"); Console.WriteLine("Entries:"); foreach (var entry in entries) { Console.WriteLine(entry); } } } } ``` 該程序列出了指定目錄中的所有條目。 條目必須以`w`字符開頭。 ## C# 目錄大小 在下面的示例中,我們確定目錄的大小。 `Program.cs` ```cs using System; using System.IO; namespace DirectorySize { class Program { static void Main(string[] args) { var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); long size = 0; var myDir = $@"{docPath}/csharp"; var dirInfo = new DirectoryInfo(myDir); foreach (FileInfo fi in dirInfo.GetFiles("*", SearchOption.AllDirectories)) { size += fi.Length; } Console.WriteLine($"The directory size: {size} bytes"); } } } ``` 要獲取目錄的大小,我們使用`DirectoryInfo`的`GetFiles()`方法。 它返回`FileInfo`類型的數組。 `FileInfo`的`Length`屬性檢索文件的大小。 ```cs foreach (FileInfo fi in dirInfo.GetFiles("*", SearchOption.AllDirectories)) { size += fi.Length; } ``` 我們搜索指定目錄及其子目錄中的所有文件。 我們獲取每個檢索到的文件的大小并添加它們。 ## C# 復制目錄 在以下示例中,我們復制目錄。 `Program.cs` ```cs using System; using System.IO; namespace CopyDirectory { class Program { static void Main(string[] args) { var source = @"C:\Users\Jano\Documents\websites"; var dest = @"C:\Users\Jano\Documents\websites-2"; DirectoryCopy(source, dest, true); Console.WriteLine("Copying finished"); } private static void DirectoryCopy(string source, string dest, bool copySubDirs = true) { var dir = new DirectoryInfo(source); if (!dir.Exists) { throw new DirectoryNotFoundException( $"Source directory does not exist or could not be found: {source}"); } DirectoryInfo[] dirs = dir.GetDirectories(); if (!Directory.Exists(dest)) { Directory.CreateDirectory(dest); } FileInfo[] files = dir.GetFiles(); foreach (FileInfo file in files) { string tempPath = Path.Combine(dest, file.Name); file.CopyTo(tempPath, false); } if (copySubDirs) { foreach (DirectoryInfo subdir in dirs) { string tempPath = Path.Combine(dest, subdir.Name); DirectoryCopy(subdir.FullName, tempPath, copySubDirs); } } } } } ``` 在示例中,我們將目錄及其所有子目錄復制到新位置。 ```cs var source = @"C:\Users\Jano\Documents\websites"; var dest = @"C:\Users\Jano\Documents\websites-2"; ``` 我們定義源目錄和目標目錄。 ```cs DirectoryCopy(source, dest, true); ``` 復制委托給`DirectoryCopy()`方法。 第三個參數確定是否也復制子目錄。 ```cs var dir = new DirectoryInfo(source); if (!dir.Exists) { throw new DirectoryNotFoundException( $"Source directory does not exist or could not be found: {source}"); } ``` 我們從源路徑創建一個`DirectoryInfo`對象。 如果目錄不存在,我們拋出`DirectoryNotFoundException`。 ```cs DirectoryInfo[] dirs = dir.GetDirectories(); ``` 我們使用`GetDirectories()`方法獲取所有頂級目錄。 ```cs if (!Directory.Exists(dest)) { Directory.CreateDirectory(dest); } ``` 如果目標目錄不存在,我們將創建它。 ```cs FileInfo[] files = dir.GetFiles(); foreach (FileInfo file in files) { string tempPath = Path.Combine(dest, file.Name); file.CopyTo(tempPath, false); } ``` 我們將文件放在目錄中,然后將其復制到新位置。 ```cs if (copySubDirs) { foreach (DirectoryInfo subdir in dirs) { string tempPath = Path.Combine(dest, subdir.Name); DirectoryCopy(subdir.FullName, tempPath, copySubDirs); } } ``` 如果設置了`copySubDirs`,我們會將子目錄及其內容復制到新位置。 我們遞歸調用`DirectoryCopy()`方法。 ## C# 目錄訪問控制列表 訪問控制列表(ACL)是訪問控制條目(ACE)的列表。 ACL 中的每個 ACE 都標識一個受托者,并指定允許,拒絕或審核該受托者的訪問權限。 `DirectoryInfo` `GetAccessControl()`方法獲取當前目錄的訪問控制列表(ACL)條目。 ```cs $ dotnet add package System.IO.FileSystem.AccessControl ``` 我們需要添加`System.IO.FileSystem.AccessControl`包。 `Program.cs` ```cs using System; using System.IO; using System.Security.AccessControl; namespace DirectoryACL { class Program { static void Main(string[] args) { var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var myDir = $@"{docPath}\test"; var dirInfo = new DirectoryInfo(myDir); DirectorySecurity dSecurity = dirInfo.GetAccessControl(); AuthorizationRuleCollection acl = dSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)); foreach (FileSystemAccessRule ace in acl) { Console.WriteLine("Account: {0}", ace.IdentityReference.Value); Console.WriteLine("Type: {0}", ace.AccessControlType); Console.WriteLine("Rights: {0}", ace.FileSystemRights); Console.WriteLine("Inherited: {0}", ace.IsInherited); Console.WriteLine("------------------------"); } } } } ``` 該示例顯示指定目錄的 ACL。 ```cs var dirInfo = new DirectoryInfo(myDir); ``` 創建一個`DirectoryInfo`對象。 ```cs DirectorySecurity dSecurity = dirInfo.GetAccessControl(); ``` `GetAccessControl()`方法返回一個`DirectorySecurity`對象,該對象封裝了目錄的訪問控制規則。 ```cs AuthorizationRuleCollection acl = dSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)); ``` 我們使用`GetAccessRules()`方法獲得了一組安全規則。 ```cs foreach (FileSystemAccessRule ace in acl) { Console.WriteLine("Account: {0}", ace.IdentityReference.Value); Console.WriteLine("Type: {0}", ace.AccessControlType); Console.WriteLine("Rights: {0}", ace.FileSystemRights); Console.WriteLine("Inherited: {0}", ace.IsInherited); Console.WriteLine("------------------------"); } ``` 我們在一個`foreach`循環中枚舉訪問控制規則。 在本教程中,我們使用了 C# 中的目錄。 閱讀 [C# 教程](/lang/csharp/)或列出[所有 C# 教程](/all/#csharp)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看