使用C ++在Windows上创建符号链接

时间:2015-03-26 13:11:34

标签: winapi symlink

我想以跨平台的方式从我的程序中创建指向我的数据的符号链接。对于* nix系统,有symlink。对于Windows,我在SO中找到了来自CreateSymbolicLink的函数this answer,我正在以这种方式运行它:

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

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

提前致谢!

更新:

我在上述电话后立即开始GetLastError

DWORD err = GetLastError();

err = 1314。谢谢@David

更新2:

根据@ David的回复,Windows确实让非管理员创建软链接。如果Win API的未来迭代改变了这一点,我将保持问题的开放性。然后我会更新答案。截至2015年3月26日,@ David的回答是正确的。

3 个答案:

答案 0 :(得分:3)

来自documentation

  

如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。

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

答案 1 :(得分:0)

我抓住了为我的测试格式化为FAT的USB记忆棒。如果您使用正确的卷格式并且您在管理员组中,则上述代码应该有效。如果您使用的是Windows 10,则不需要调整令牌权限,也不需要使用UNC作为参数。

答案 2 :(得分:0)

使用c ++ 17 create_symlin代替https://en.cppreference.com/w/cpp/filesystem/create_symlink 很好。