本文告诉大家如何使用 dotnet 6 提供的 Directory.CreateSymbolicLink 和 File.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 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 的方法和使用 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
参考文档:
更多链接相关请看:
本文会经常更新,请阅读原文: https://blog.lindexi.com/post/dotnet-6-%E4%BD%BF%E7%94%A8-CreateSymbolicLink-%E5%88%9B%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者前往 CSDN 关注我的主页
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。
无盈利,不卖课,做纯粹的技术博客
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有