【问题标题】:Symlink Windows符号链接窗口
【发布时间】:2016-12-27 15:15:06
【问题描述】:

我正在尝试使用 c++/cli(基于 Windows)创建符号链接生成器 Microsoft 上有一个文档 (MS)

但我不知道它是如何工作的。

我试图找到一个可行的示例,但我找不到,而且我自己也无法找到可行的解决方案。

我的完整密码HERE!

private: System::Void btnCreateSymlinks_Click(System::Object^  sender, System::EventArgs^  e) {
  String^ pathSource = GetSourcePath();
  String^ pathDest = GetDestinationPath();
  String^ folder = System::IO::Path::GetFileName(pathSource);
  lblInfo->Text = pathSource + " -> " + pathDest + "" + folder;
}

如何将 CreateSymbolicLink 函数与那些 pathSource 和 pathDest 一起使用?

【问题讨论】:

  • 这个article 可能会有所帮助。
  • 它适用于 c#,我需要 c++

标签: window c++-cli symlink


【解决方案1】:

为了在垃圾收集堆栈上使用 .NET 字符串,您需要固定指针(这是 p/invoke 自动为 C# 编码器执行的操作,但 C++/CLI 编码器需要请求)。

pin_ptr<const wchar_t> wcsTarget = PtrToStringChars(pathSource);
pin_ptr<const wchar_t> wcsSymlink = PtrToStringChars(Path::Combine(pathDest, folder));

然后只需调用 API 的 Unicode 版本(因为 .NET 字符串始终是 Unicode)。

CreateSymbolicLinkW(wcsSymlink, wcsTarget, 0U);

【讨论】:

  • PtrToStringChars 不适用于 pin_ptr 至少对我来说我不知道​​
  • 我尝试了使用stackoverflow.com/questions/9782669/… 位的解决方法 CreateSymbolicLinkW 不起作用
  • @xQp:远离 MFC,这里没有理由将 Unicode 转换为 ANSI,因为符号链接 API 只需要将它转换回来。如果您没有#include&lt;vcclr.h&gt;,请添加它并再次尝试PtrToStringChars
  • 请解释“不起作用”。有编译错误吗?
  • @xQp:您的问题专门传递了一个文件名,而不是一个目录。要使其适用于目录,请使用SYMBOLIC_LINK_FLAG_DIRECTORY 标志作为第三个参数。您链接的文档对此进行了说明。
猜你喜欢
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多