In your controller initialize class obj: LocalPathToUNCPathConversion obj = new LocalPathToUNCPathConversion(); string localPath = "filename"; //give locally mapped network drive file path string UNCFilePath = obj.GetUniversalName(localPath); write logic in a separate class file named as LocalPathToUNCPathConversion.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.IO; using System.Runtime.InteropServices; using System.ComponentModel; namespace YourProjectName { public class LocalPathToUNCPathConversion { [DllImport("mpr.dll", CharSet = CharSet.Unicode)] [return: MarshalAs(UnmanagedType.U4)] static extern int WNetGetUniversalName( string lpLocalPath, [MarshalAs(UnmanagedType.U4)] int dwInfoLevel, IntPtr lpBuffer, [MarshalAs(UnmanagedType.U4)] ref int lpBufferSize); const int UNIVERSAL_NAME_INFO_LEVEL = 0x00000001; const int REMOTE_NAME_INFO_LEVEL = 0x00000002; const int ERROR_MORE_DATA = 234; const int NOERROR = 0; public string GetUniversalName(string localPath) { // The return value. string retVal = null; // The pointer in memory to the structure. IntPtr buffer = IntPtr.Zero; // Wrap in a try/catch block for cleanup. try { // First, call WNetGetUniversalName to get the size. int size = 0; // Make the call. // Pass IntPtr.Size because the API doesn't like null, even though // size is zero. We know that IntPtr.Size will be // aligned correctly. int apiRetVal = WNetGetUniversalName(localPath, UNIVERSAL_NAME_INFO_LEVEL, (IntPtr)IntPtr.Size, ref size); // If the return value is not ERROR_MORE_DATA, then // raise an exception. if (apiRetVal != ERROR_MORE_DATA) // Throw an exception. throw new Win32Exception(apiRetVal); // Allocate the memory. buffer = Marshal.AllocCoTaskMem(size); // Now make the call. apiRetVal = WNetGetUniversalName(localPath, UNIVERSAL_NAME_INFO_LEVEL, buffer, ref size); // If it didn't succeed, then throw. if (apiRetVal != NOERROR) // Throw an exception. throw new Win32Exception(apiRetVal); // Now get the string. It's all in the same buffer, but // the pointer is first, so offset the pointer by IntPtr.Size // and pass to PtrToStringAnsi. retVal = Marshal.PtrToStringAuto(new IntPtr(buffer.ToInt64() + IntPtr.Size), size); retVal = retVal.Substring(0, retVal.IndexOf('\0')); } finally { // Release the buffer. Marshal.FreeCoTaskMem(buffer); } // First, allocate the memory for the structure. // That's all folks. return retVal; } } }
Convert local path to UNC (Universal) File Path using Java Script ActiveXObject
Thank you so much! Even in February 2019 this is still the best solution on the internet.
LikeLiked by 1 person