使用 C++ 在 Windows 上创建 Symbolic Link

Create Symbolic Link on Windows using C++

我想以跨平台的方式从我的程序创建指向我的数据的符号链接。对于 *nix 系统,SO 中有 symlink. For Windows, I found the function CreateSymbolicLink from this answer,我 运行 以这种方式设置它:

int test = CreateSymbolicLink(input_fileName.c_str(), ouput_fileName.c_str(), 0);

test总是returns0,这意味着函数失败(而且output_fileName中指定的文件确实不存在)。我做错了什么?

提前致谢!

更新:

我在上面的调用之后 运行 GetLastError:

DWORD err = GetLastError();

err = 1314。谢谢@David

更新 2:

根据@David 的回复,Windows 不会 让非管理员创建软链接。如果 Win API 的未来迭代改变了这个,我将保持这个问题。然后我会更新答案。截至 26/March/2015,@David 的回答是正确的。

来自documentation

If the function fails, the return value is zero. To get extended error information, call GetLastError.

您似乎没有打电话给 GetLastError。你应该这样做。可能的错误代码是 ERROR_PRIVILEGE_NOT_HELD,其值为 1314。如果调用进程没有足够的权限,你会得到这个。您需要 运行 作为提升的管理员才能使用此功能。

我抓起格式化为 FAT 的 U 盘进行测试。如果您使用正确的卷格式并且您在管理员组中,则上述代码应该有效。如果您在 Windows 10 中,则不需要调整令牌权限,并且不需要 UNC 参数。

使用 c++17 create_symlin 代替 https://en.cppreference.com/w/cpp/filesystem/create_symlink 它工作正常。