creando disco duro virtual

驴C贸mo puedo crear un disco duro virtual (como Z 馃檪 que almacene sus archivos en un disco duro f铆sico (como C: \ Archivos)?

Aqu铆 est谩 el c贸digo C # para hacer esto directamente:

 using System; using System.Text; using System.ComponentModel; using System.Runtime.InteropServices; static class Subst { public static void MapDrive(char letter, string path) { if (!DefineDosDevice(0, devName(letter), path)) throw new Win32Exception(); } public static void UnmapDrive(char letter) { if (!DefineDosDevice(2, devName(letter), null)) throw new Win32Exception(); } public static string GetDriveMapping(char letter) { var sb = new StringBuilder(259); if (QueryDosDevice(devName(letter), sb, sb.Capacity) == 0) { // Return empty string if the drive is not mapped int err = Marshal.GetLastWin32Error(); if (err == 2) return ""; throw new Win32Exception(); } return sb.ToString().Substring(4); } private static string devName(char letter) { return new string(char.ToUpper(letter), 1) + ":"; } [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool DefineDosDevice(int flags, string devname, string path); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern int QueryDosDevice(string devname, StringBuilder buffer, int bufSize); } 

Uso de la muestra:

  Subst.MapDrive('z', @"c:\temp"); Console.WriteLine(Subst.GetDriveMapping('z')); Subst.UnmapDrive('z'); 

Puedes usar el comando subst. Utilice System.Diagnostic.Process para ejecutar el subst.exe con los par谩metros deseados.

Aqu铆 est谩 la syntax del comando:

Sintaxis

Asocia una ruta con una letra de unidad.

 SUBST [drive1: [drive2:]path] SUBST drive1: /D 

drive1: especifica una unidad virtual a la que desea asignar una ruta.

[drive2:] ruta Especifica la unidad f铆sica y la ruta que desea asignar a una unidad virtual.

/ D Borra una unidad sustituida (virtual).

Escriba SUBST sin par谩metros para mostrar una lista de las unidades virtuales actuales. Lista de las unidades virtuales actuales.

H谩galo de la misma manera en que asignar铆a un disco de red, pero ap煤ntelo a una carpeta en la m谩quina actual. Lo 煤nico que tiene que hacer es usar una ruta UNC para la carpeta local.

Aqu铆 hay una clase de ayuda.

No estoy seguro de c贸mo hacer esto en C # pero esto deber铆a ayudarte:

Acabo de probar esto y funciona perfecto.

En mi computadora tengo 1 disco duro dise帽ado en 2, C: y D: entrando en D: tengo una carpeta llamada Copia de seguridad, si haces clic derecho en la carpeta y haces clic en la pesta帽a Share , ver谩s Network Path … En mi PC parece que \\Robert-home\backup

Luego proced铆 a CMD y ejecut茅 el siguiente comando

 NET USE Z: \\Robert-home\backup 

La bruja asigna con 茅xito el contenido de D:\backup a Z:

Estoy seguro de que puede completar esta tarea dentro de C # ..

Normalmente utilizo este m茅todo en el trabajo para que el soporte al cliente transfiera y realice copias de seguridad de los archivos antes de que se les env铆en nuevas consolas.