dotnet 6 使用 CreateSymbolicLink 創建文件夾符號鏈接
- 2021 年 11 月 9 日
- 筆記
- dotnet core
本文告訴大家如何使用 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.
錯誤
程式碼
可以通過如下方式獲取本文程式碼
先創建一個空文件夾,接著使用命令行 cd 命令進入此空文件夾,在命令行裡面輸入以下程式碼,即可獲取到本文的程式碼
git init
git remote add origin //gitee.com/lindexi/lindexi_gd.git
git pull origin 0d632e7c1b7e9245744c9816d2c91b3ba94e1838
以上使用的是 gitee 的源,如果 gitee 不能訪問,請替換為 github 的源
git remote remove origin
git remote add origin //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