符号链接 Windows
Symlink Windows
我正在尝试使用 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 一起使用?
为了在垃圾收集堆栈上使用 .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);
我正在尝试使用 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 一起使用?
为了在垃圾收集堆栈上使用 .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);