Сообщение Re[2]: C# Монтирование сетевого диска от 05.11.2014 2:09
Изменено 05.11.2014 2:52 Zoldan
Здравствуйте, alexsoff, Вы писали:
A>Здравствуйте, Zoldan, Вы писали:
Z>>[]
A>Можно так:
A>
Спасибо. Вроде работает. Остался вопрос — как переименовать диск?
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>
Спасибо. Вроде работает. Остался вопрос — как переименовать диск? На сколько я понимаю это надо рыться в проводнике, и что-то мне подсказывает, что штатными средствами .Net тут ничего не сделаешь. Опять WINAPI ?
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 ?