zoukankan      html  css  js  c++  java
  • dotnet 6 使用 CreateSymbolicLink 创建文件夹符号链接

    本文告诉大家如何使用 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. 错误

    代码

    以上所有代码放在 githubgitee 欢迎访问

    可以通过如下方式获取本文代码

    先创建一个空文件夹,接着使用命令行 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/

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名[林德熙](http://blog.csdn.net/lindexi_gd)(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我[联系](mailto:lindexi_gd@163.com)。
  • 相关阅读:
    tomcat 远程部署项目
    Maven的使用
    FTP服务器的使用
    2017.10-2018.10工作思考
    Java面试题准备(二)
    移植数据库的心得
    重新安装开发环境之安装使用plsql碰到的两个问题
    Redis学习笔记(一)
    开发之没沟通误删客户数据库数据之找数据路
    Java面试准备(一)
  • 原文地址:https://www.cnblogs.com/lindexi/p/15530545.html
Copyright © 2011-2022 走看看