Информация об изменениях

Сообщение Re[2]: C# Монтирование сетевого диска от 05.11.2014 2:09

Изменено 05.11.2014 2:52 Zoldan

Здравствуйте, alexsoff, Вы писали:

A>Здравствуйте, Zoldan, Вы писали:


Z>>[]

A>Можно так:
A>
A>namespace ConsoleApplication2
A>{
A>    public class DriveSettings
A>    {
A>        private enum ResourceScope
A>        {
A>            RESOURCE_CONNECTED = 1,
A>            RESOURCE_GLOBALNET,
A>            RESOURCE_REMEMBERED,
A>            RESOURCE_RECENT,
A>            RESOURCE_CONTEXT
A>        }
A>        private enum ResourceType
A>        {
A>            RESOURCETYPE_ANY,
A>            RESOURCETYPE_DISK,
A>            RESOURCETYPE_PRINT,
A>            RESOURCETYPE_RESERVED
A>        }
A>        private enum ResourceUsage
A>        {
A>            RESOURCEUSAGE_CONNECTABLE = 0x00000001,
A>            RESOURCEUSAGE_CONTAINER = 0x00000002,
A>            RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
A>            RESOURCEUSAGE_SIBLING = 0x00000008,
A>            RESOURCEUSAGE_ATTACHED = 0x00000010
A>        }
A>        private enum ResourceDisplayType
A>        {
A>            RESOURCEDISPLAYTYPE_GENERIC,
A>            RESOURCEDISPLAYTYPE_DOMAIN,
A>            RESOURCEDISPLAYTYPE_SERVER,
A>            RESOURCEDISPLAYTYPE_SHARE,
A>            RESOURCEDISPLAYTYPE_FILE,
A>            RESOURCEDISPLAYTYPE_GROUP,
A>            RESOURCEDISPLAYTYPE_NETWORK,
A>            RESOURCEDISPLAYTYPE_ROOT,
A>            RESOURCEDISPLAYTYPE_SHAREADMIN,
A>            RESOURCEDISPLAYTYPE_DIRECTORY,
A>            RESOURCEDISPLAYTYPE_TREE,
A>            RESOURCEDISPLAYTYPE_NDSCONTAINER
A>        }
A>        [StructLayout(LayoutKind.Sequential)]
A>        private struct NETRESOURCE
A>        {
A>            public ResourceScope oResourceScope;
A>            public ResourceType oResourceType;
A>            public ResourceDisplayType oDisplayType;
A>            public ResourceUsage oResourceUsage;
A>            public string sLocalName;
A>            public string sRemoteName;
A>            public string sComments;
A>            public string sProvider;
A>        }
A>        [DllImport("mpr.dll")]
A>        private static extern int WNetAddConnection2
A>            (ref NETRESOURCE oNetworkResource, string sPassword,
A>            string sUserName, int iFlags);

A>        [DllImport("mpr.dll")]
A>        private static extern int WNetCancelConnection2
A>            (string sLocalName, uint iFlags, int iForce);

A>        public static void MapNetworkDrive(string sDriveLetter, string sNetworkPath)
A>        {
A>            if (sNetworkPath.Substring(sNetworkPath.Length - 1, 1) == @"\")
A>            {
A>                sNetworkPath = sNetworkPath.Substring(0, sNetworkPath.Length - 1);
A>            }

A>            NETRESOURCE oNetworkResource = new NETRESOURCE();
A>            oNetworkResource.oResourceType = ResourceType.RESOURCETYPE_DISK;
A>            oNetworkResource.sLocalName = sDriveLetter + ":";
A>            oNetworkResource.sRemoteName = sNetworkPath;
           
A>            if (IsDriveMapped(sDriveLetter))
A>            {
A>                DisconnectNetworkDrive(sDriveLetter, true);
A>            }

A>            WNetAddConnection2(ref oNetworkResource, null, null, 0);
A>        }

A>        public static int DisconnectNetworkDrive(string sDriveLetter, bool bForceDisconnect)
A>        {
A>            if (bForceDisconnect)
A>            {
A>                return WNetCancelConnection2(sDriveLetter + ":", 0, 1);
A>            }
A>            else
A>            {
A>                return WNetCancelConnection2(sDriveLetter + ":", 0, 0);
A>            }
A>        }

A>        public static bool IsDriveMapped(string sDriveLetter)
A>        {
A>            string[] DriveList = Environment.GetLogicalDrives();
A>            for (int i = 0; i < DriveList.Length; i++)
A>            {
A>                if (sDriveLetter + ":\\" == DriveList[i].ToString())
A>                {
A>                    return true;
A>                }
A>            }
A>            return false;
A>        }
A>    }

A>    class Program
A>    {
A>        static void Main(string[] args)
A>        {
A>            DriveSettings.MapNetworkDrive("X", @"\\Net\Volume_1");
A>        }
A>    }
A>}
A>

Спасибо. Вроде работает. Остался вопрос — как переименовать диск?
Re[2]: C# Монтирование сетевого диска
Здравствуйте, alexsoff, Вы писали:

A>Здравствуйте, Zoldan, Вы писали:


Z>>[]

A>Можно так:
A>
A>namespace ConsoleApplication2
A>{
A>    public class DriveSettings
A>    {
A>        private enum ResourceScope
A>        {
A>            RESOURCE_CONNECTED = 1,
A>            RESOURCE_GLOBALNET,
A>            RESOURCE_REMEMBERED,
A>            RESOURCE_RECENT,
A>            RESOURCE_CONTEXT
A>        }
A>        private enum ResourceType
A>        {
A>            RESOURCETYPE_ANY,
A>            RESOURCETYPE_DISK,
A>            RESOURCETYPE_PRINT,
A>            RESOURCETYPE_RESERVED
A>        }
A>        private enum ResourceUsage
A>        {
A>            RESOURCEUSAGE_CONNECTABLE = 0x00000001,
A>            RESOURCEUSAGE_CONTAINER = 0x00000002,
A>            RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
A>            RESOURCEUSAGE_SIBLING = 0x00000008,
A>            RESOURCEUSAGE_ATTACHED = 0x00000010
A>        }
A>        private enum ResourceDisplayType
A>        {
A>            RESOURCEDISPLAYTYPE_GENERIC,
A>            RESOURCEDISPLAYTYPE_DOMAIN,
A>            RESOURCEDISPLAYTYPE_SERVER,
A>            RESOURCEDISPLAYTYPE_SHARE,
A>            RESOURCEDISPLAYTYPE_FILE,
A>            RESOURCEDISPLAYTYPE_GROUP,
A>            RESOURCEDISPLAYTYPE_NETWORK,
A>            RESOURCEDISPLAYTYPE_ROOT,
A>            RESOURCEDISPLAYTYPE_SHAREADMIN,
A>            RESOURCEDISPLAYTYPE_DIRECTORY,
A>            RESOURCEDISPLAYTYPE_TREE,
A>            RESOURCEDISPLAYTYPE_NDSCONTAINER
A>        }
A>        [StructLayout(LayoutKind.Sequential)]
A>        private struct NETRESOURCE
A>        {
A>            public ResourceScope oResourceScope;
A>            public ResourceType oResourceType;
A>            public ResourceDisplayType oDisplayType;
A>            public ResourceUsage oResourceUsage;
A>            public string sLocalName;
A>            public string sRemoteName;
A>            public string sComments;
A>            public string sProvider;
A>        }
A>        [DllImport("mpr.dll")]
A>        private static extern int WNetAddConnection2
A>            (ref NETRESOURCE oNetworkResource, string sPassword,
A>            string sUserName, int iFlags);

A>        [DllImport("mpr.dll")]
A>        private static extern int WNetCancelConnection2
A>            (string sLocalName, uint iFlags, int iForce);

A>        public static void MapNetworkDrive(string sDriveLetter, string sNetworkPath)
A>        {
A>            if (sNetworkPath.Substring(sNetworkPath.Length - 1, 1) == @"\")
A>            {
A>                sNetworkPath = sNetworkPath.Substring(0, sNetworkPath.Length - 1);
A>            }

A>            NETRESOURCE oNetworkResource = new NETRESOURCE();
A>            oNetworkResource.oResourceType = ResourceType.RESOURCETYPE_DISK;
A>            oNetworkResource.sLocalName = sDriveLetter + ":";
A>            oNetworkResource.sRemoteName = sNetworkPath;
           
A>            if (IsDriveMapped(sDriveLetter))
A>            {
A>                DisconnectNetworkDrive(sDriveLetter, true);
A>            }

A>            WNetAddConnection2(ref oNetworkResource, null, null, 0);
A>        }

A>        public static int DisconnectNetworkDrive(string sDriveLetter, bool bForceDisconnect)
A>        {
A>            if (bForceDisconnect)
A>            {
A>                return WNetCancelConnection2(sDriveLetter + ":", 0, 1);
A>            }
A>            else
A>            {
A>                return WNetCancelConnection2(sDriveLetter + ":", 0, 0);
A>            }
A>        }

A>        public static bool IsDriveMapped(string sDriveLetter)
A>        {
A>            string[] DriveList = Environment.GetLogicalDrives();
A>            for (int i = 0; i < DriveList.Length; i++)
A>            {
A>                if (sDriveLetter + ":\\" == DriveList[i].ToString())
A>                {
A>                    return true;
A>                }
A>            }
A>            return false;
A>        }
A>    }

A>    class Program
A>    {
A>        static void Main(string[] args)
A>        {
A>            DriveSettings.MapNetworkDrive("X", @"\\Net\Volume_1");
A>        }
A>    }
A>}
A>

Спасибо. Вроде работает. Остался вопрос — как переименовать диск? На сколько я понимаю это надо рыться в проводнике, и что-то мне подсказывает, что штатными средствами .Net тут ничего не сделаешь. Опять WINAPI ?