gpt4 book ai didi

c# - 从本地路径或映射路径获取 UNC 路径

转载 作者:太空狗 更新时间:2023-10-29 20:06:31 25 4
gpt4 key购买 nike

在 Delphi 中有一个函数 ExpandUNCFileName,它接收文件名并将其转换为 UNC 等价物。它扩展映射的驱动器并跳过本地和已经扩展的位置。

样本

C:\Folder\Text.txt -> C:\Folder\Text.txt
L:\Folder\Sample.txt ->\\server\Folder1\Folder\Sample.txt 其中 L: 映射到\\server\Folder1\
\\server\Folder\Sample.odf ->\server\Folder\Sample.odf

有没有在 C# 中执行此操作的简单方法,还是我必须使用 Windows API 调用 WNetGetConnection,然后手动检查无法映射的那些?

最佳答案

这是一些带有包装函数 LocalToUNC 的 C# 代码,它似乎工作正常,但我还没有对它进行广泛的测试。

    [DllImport("mpr.dll")]
static extern int WNetGetUniversalNameA(
string lpLocalPath, int dwInfoLevel, IntPtr lpBuffer, ref int lpBufferSize
);

// I think max length for UNC is actually 32,767
static string LocalToUNC(string localPath, int maxLen = 2000)
{
IntPtr lpBuff;

// Allocate the memory
try
{
lpBuff = Marshal.AllocHGlobal(maxLen);
}
catch (OutOfMemoryException)
{
return null;
}

try
{
int res = WNetGetUniversalNameA(localPath, 1, lpBuff, ref maxLen);

if (res != 0)
return null;

// lpbuff is a structure, whose first element is a pointer to the UNC name (just going to be lpBuff + sizeof(int))
return Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(lpBuff));
}
catch (Exception)
{
return null;
}
finally
{
Marshal.FreeHGlobal(lpBuff);
}
}

关于c# - 从本地路径或映射路径获取 UNC 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com