c++怎么创建文件的快捷方式_create_symlink硬链接与软链接【进阶】

煙雲

煙雲

2026-03-24

658人浏览

原创

c++oding="utf-8" ?>

windows下createsymboliclink失败主因是权限不足和路径格式错误:需管理员权限、源目标均用绝对路径、源路径不能以\结尾、须明确指定文件或目录标志。

c++怎么创建文件的快捷方式_create_symlink硬链接与软链接【进阶】

Windows 下用 CreateSymbolicLink 创建软链接(快捷方式)失败的常见原因

多数人卡在权限和路径格式上。CreateSymbolicLink 默认要求管理员权限,且目标路径不能是相对路径(哪怕当前目录下也不行),源路径也不能带尾部反斜杠。

  • 必须以管理员身份运行程序,否则返回 ERROR_PRIVILEGE_NOT_HELD
  • 目标路径(即你要指向的原文件)要用绝对路径,推荐用 GetFullPathName 转换
  • 源路径(即快捷方式位置)也必须是绝对路径,且不能以 \ 结尾(否则函数直接返回失败)
  • 第三个参数要明确传 SYMBOLIC_LINK_FLAG_FILE(文件)或 SYMBOLIC_LINK_FLAG_DIRECTORY(目录),不能靠猜测

Linux/macOS 用 symlink 创建软链接时要注意路径语义

symlink 的第一个参数是“目标”,第二个是“新链接名”,但这个“目标”是相对于链接所在位置解析的,不是创建时的当前目录——这点极易误解。

C函数速查手册(CHM版)
C函数速查手册(CHM版)

C函数速查手册(CHM版)

下载
  • 如果想让链接在任意位置都能工作,目标路径应写成相对路径(比如 ../bin/myapp)或绝对路径(如 /usr/local/bin/myapp
  • 写成 ./myapp 是错的:链接建好后,只要不在同一目录打开它,就会失效
  • 硬链接(link)不能跨文件系统,也不能用于目录;软链接可以,但目标不存在时链接仍能创建(只是变成“断链”)
  • readlink -f 可检查软链接是否有效,比 ls -l 更可靠

C++ 跨平台创建软链接的现实取舍

标准 C++ 没有 symlink 接口,C++17 的 std::filesystem::create_symlink 看似完美,但实际受限严重:

  • MSVC 2019+ 在 Windows 上默认禁用 symlink 支持,需手动开启开发者模式或以管理员运行,否则抛出 std::filesystem::filesystem_error
  • Clang/libc++ 在 macOS 上对符号链接支持良好,但在某些旧 Linux 发行版(如 CentOS 7)可能因内核或 libc 版本太低而静默失败
  • 如果你只控制部署环境,直接调系统 API 更稳;如果做通用库,建议 fallback 到复制或提示用户手动操作,别硬扛

误用 hard link 替代快捷方式的典型后果

硬链接不是快捷方式,它是同一 inode 的多个入口,删掉原文件不影响硬链接内容——这恰恰是很多人想要“快捷方式”时却选错方案的根本原因。

  • linkstd::filesystem::create_hard_link 无法跨分区/挂载点,Device or resource busy 是常见错误
  • 硬链接不能指向目录(Linux 不允许,Windows NTFS 的硬链接目录是另一套机制,不兼容 POSIX)
  • 修改硬链接任一副本,所有副本内容同步变化(因为共享数据块),这不是“快捷方式”的行为逻辑
  • 备份工具、IDE 文件监视器常把硬链接当成独立文件处理,导致重复扫描或误判变更
事情说清了就结束。真正麻烦的不是怎么写那几行代码,而是判断“这里到底该用软链、硬链,还是干脆别用链”。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.20

273

3

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

2766

3

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

2120

12

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.12.29

3356

9

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2026.01.19

160

15

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.26

2467

3

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.27

1965

6

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

2023.08.01

1191

3

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1133

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
RabbitMQ 教程手册
RabbitMQ 教程手册

共0课时 | 0人学习

Linux man-pages 项目
Linux man-pages 项目

共0课时 | 0人学习

C# 教程
C# 教程

共94课时 | 20.1万人学习