使用 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 的回答是正确的。
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
它工作正常。
我想以跨平台的方式从我的程序创建指向我的数据的符号链接。对于 *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 的回答是正确的。
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 它工作正常。