本文告訴大家如何使用 dotnet 6 提供的 Directory.CreateSymbolicLink 和 File.CreateSymbolicLink 方法創建檔案夾和檔案的符號鏈接
Directory.CreateSymbolicLink
例子
使用方法十分簡單,如下面例子,給 aa 檔案夾創建一個叫 bb 檔案夾的符號鏈接
public static void Main(string[] args)
{
var a = Directory.CreateDirectory("aa");
Directory.CreateSymbolicLink("bbb", a.FullName);
}
效果
執行上述代碼的效果如下

在 Rx-Explorer 里的效果如下

更多細節
這個 CreateSymbolicLink 方法是有回傳值的,創建成功檔案夾鏈接,將會回傳檔案夾對應的 DirectoryInfo 值
var result = Directory.CreateSymbolicLink("bbb", a.FullName) as DirectoryInfo;
// 輸出 bbb 檔案夾
Console.WriteLine(result.FullName);
行為特例
-
如果傳入的
pathToTarget引數,也就是上面代碼的a.FullName引數,如果是檔案,那么以上函式將繼續成功執行,創建出一個不可用的檔案夾鏈接 -
在當
path引數,也就是上面代碼的"bbb"引數,存在檔案夾的時候,將會失敗,拋出System.IO.IOException: Cannot create 'bbb' because a file or directory with the same name already exists.錯誤
代碼
以上所有代碼放在 github 和 gitee 歡迎訪問
可以通過如下方式獲取本文代碼
先創建一個空檔案夾,接著使用命令列 cd 命令進入此空檔案夾,在命令列里面輸入以下代碼,即可獲取到本文的代碼
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 0d632e7c1b7e9245744c9816d2c91b3ba94e1838
以上使用的是 gitee 的源,如果 gitee 不能訪問,請替換為 github 的源
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
獲取代碼之后,進入 BemfejulereLarcayjika 檔案夾
File.CreateSymbolicLink
例子
使用 File.CreateSymbolicLink 的方法和使用 Directory.CreateSymbolicLink 的差不多,不同的在于型別不相同和傳入的引數要求是檔案而已,如下面代碼
File.WriteAllText("a.txt", "123");
var result = File.CreateSymbolicLink("b.txt", "a.txt") as FileInfo;
// 輸出 b 檔案
Console.WriteLine(result.FullName);
Console.WriteLine(File.ReadAllText("b.txt"));
可以看到符號鏈接的檔案對于上層應用來說和其他檔案是相同的用法,如上面代碼,讀取 b.txt 檔案就和讀取 a.txt 一樣
效果
執行上面的代碼可以看到如下的效果

嘗試雙擊 b.txt 用記事本打開,記事本里面看到的是 a.txt 的內容,編輯也是對 a.txt 生效,如何 Windows API 的定義
行為特例
假定使用 File.CreateSymbolicLink 方法,傳入的作為符號鏈接的是檔案夾,那么將會拋出 System.UnauthorizedAccessException 例外,當前是 2021.11.06 使用 .NET 6-rc2 也許后續版本會更改行為
如果傳入的檔案是不存在的,也就是上面代碼的 a.txt 假定是不存在的,將會拋出 System.IO.FileNotFoundException 錯誤
代碼
在上面的代碼倉庫基礎上,切換到 a423c63cb7bbd2a92a7e2daf59a8eb336b5e22c2 的 commit 即可拿到代碼,可以使用如下命令進行切換
git pull origin a423c63cb7bbd2a92a7e2daf59a8eb336b5e22c2
參考
參考檔案:
- Directory.CreateSymbolicLink(String, String) Method (System.IO)
- File.CreateSymbolicLink(String, String) Method (System.IO)
更多檔案
更多鏈接相關請看:
- .NET 實作 NTFS 檔案系統的硬鏈接 mklink /J(Junction) - walterlv
- 解決 mklink 使用中的各種坑(硬鏈接,軟鏈接/符號鏈接,目錄鏈接) - walterlv
博客園博客只做備份,博客發布就不再更新,如果想看最新博客,請到 https://blog.lindexi.com/

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可,歡迎轉載、使用、重新發布,但務必保留文章署名[林德熙](http://blog.csdn.net/lindexi_gd)(包含鏈接:http://blog.csdn.net/lindexi_gd ),不得用于商業目的,基于本文修改后的作品務必以相同的許可發布,如有任何疑問,請與我[聯系](mailto:[email protected]),
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/354377.html
標籤:C#
