当前位置: 首页 > 编程语言 > C#

从本地路径或映射路径获取UNC路径分享

时间:2023-04-10 10:51:53 C#

C#学习教程:从本地或映射路径中获取UNC路径它扩展映射驱动器并跳过本地和扩展位置。示例C:FolderText.txt->C:FolderText.txtL:FolderSample.txt->\serverFolder1FolderSample.txt其中L:映射到\serverFolder1\serverFolderSample.odf->serverFolderSample。odf在C#中是否有一种简单的方法来执行此操作,或者我是否必须使用Windowsapi调用WNetGetConnection然后手动检查那些无法映射的?BCL中没有内置函数可以执行相同的操作。我认为你最好的选择是按照你的建议进入WNetGetConnection。P/调用WNetGetUniversalName()。我从www.pinvoke.net改编了这段代码。这是一些带有包装函数LocalToUNC的C#代码,虽然我没有对其进行广泛测试,但它似乎工作正常。[DllImport("mpr.dll")]staticexternintWNetGetUniversalNameA(stringlpLocalPath,intdwInfoLevel,IntPtrlpBuffer,refintlpBufferSize);//我认为UNC的最大长度实际上是32,767staticstringLocalToUNC(stringlocalPath,intmaxLen=2000){IntPtrlpBuff;//分配内存try{lpBuff=Marshal.AllocHGlobal(maxLen);}catch(OutOfMemoryException){返回null;}try{intres=WNetGetUniversalNameA(localPath,1,lpBuff,refmaxLen);如果(res!=0)返回空;//lpbuff是一个结构,它的第一个元素是指向UNC名称的指针(就是lpBuff+sizeof(int))returnMarshal.PtrToStringAnsi(Marshal.ReadIntPtr(lpBuff));}赶上(异常){返回空;}最后{Marshal.FreeHGlobal(lpBuff);}}试试这段代码,是用Delphi.Net编写的你必须把它翻译成c#函数WNetGetUniversalName;外部的;[SuppressUnmanagedCodeSecurity,DllImport(mpr,CharSet=CharSet.Ansi,SetLastError=True,EntryPoint='WNetGetUniversalNameA')]函数关于ExpandUNCFileName(constFileName:string):string;函数GetUniversalName(constFileName:string):string;常量UNIVERSAL_NAME_INFO_LEVEL=1;变量缓冲区:IntPtr;缓冲区大小:DWORD;开始结果:=文件名;缓冲区大小:=1024;缓冲区:=Marshal.AllocHGlobal(BufSize);尝试如果WNetGetUniversalName(FileName,UNIVERSAL_NAME_INFO_LEVEL,Buffer,BufSize)NO_ERROR然后退出;结果:=TUniversalNameInfo(Marshal.PtrToStructure(Buffer,TypeOf(TUniversalNameInfoalbHufferGlo))sh(UniversalNameInfoalbHufferGlo)sh(FreeGlobalName));;结尾;结尾;开始结果:=System.IO.Path.GetFullPath(文件名);if(Length(Result)>=3)and(Result[2]=':')and(Upcase(Result[1])>='A')and(Upcase(Result[1])再见教程,我希望大家多多关注---本文收集自网络,不代表立场,如涉及侵权,请点右联系管理员删除,如需转载请注明出处: