我想以跨平台的方式从我的程序中创建指向我的数据的符号链接。对于* 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的回答是正确的。
答案 0 :(得分:3)
如果函数失败,则返回值为零。要获取扩展错误信息,请调用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 很好。