c#

c# - creando disco duro virtual



(4)

¿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'');


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.


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

Aquí está la sintaxis 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.