cómo puedo crear discos duros virtuales (como Z :) que almacenan sus archivos en el disco duro físico (como C: \ Files).creando discos duros virtuales
Respuesta
Aquí es código C# para hacerlo directamente: el uso
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);
}
muestra:
Subst.MapDrive('z', @"c:\temp");
Console.WriteLine(Subst.GetDriveMapping('z'));
Subst.UnmapDrive('z');
¿funciona esto en Windows 10? no puede hacer que funcione – Kubi
Si el usuario pasa en la letra de unidad de un disco duro, 'sb' contendrá algo como' \ Device \ HarddiskVolume2' y el 'Subcadena (4)' básicamente devolverá basura. Sugeriría asegurarse de que 'sb' comience con' @ "\ ?? \" 'antes de devolver' Substring (4) '. Si comienza con otra cosa, '" "' (lo mismo que devuelve si la unidad no existe en absoluto) parece un valor razonable para devolver; no hay ninguna unidad SUBSTed para obtener la ruta de acceso. –
@ Hans Passant: el código anterior no mostrará ningún efecto cuando la aplicación se ejecuta bajo permisos de administrador. es decir, 'Run As Admin' lo intentó en Windows 8 y Windows 10 también, sin embargo, sin permisos de administrador, el código mostrará los resultados esperados, una pregunta publicada relacionada con el tema aquí, aprecia si miras https: // stackoverflow .com/q/46663368/323339 –
Puede usar el comando subst. Use System.Diagnostic.Process para ejecutar el subst.exe con los parámetros deseados.
Aquí se muestra la sintaxis de comandos:
Sintaxis
Associates un camino con una letra de unidad.
SUBST [drive1: [drive2:]path] SUBST drive1: /D
unidad1: Especifica una unidad virtual para la que desea asignar una ruta.
[unidad2:] ruta Especifica una unidad física y la ruta que desea asignar a una unidad virtual .
/D Elimina una unidad sustituida (virtual) .
Escriba SUBST sin parámetros para mostrar una lista de unidades virtuales actuales. Lista de unidades virtuales actuales.
Para que lo sepas, esto quizás sea uno de los métodos más fáciles. Sin embargo, reiniciar la computadora revertirá la montura y eliminará la unidad virtual y todo volverá a la normalidad. Si agrega la entrada al archivo autoexec.bat, la unidad virtual se puede retener durante los reinicios. –
@Ranhiru, tienes razón, la unidad virtual se revertirá en cada arranque. Una solución fácil es que el programa invoque el comando subst siempre que comience. –
En Windows 7/64, ¿cuál es la mejor manera de hacer un "subst" permanente que será visto por todos los procesos? – supercat
Hágalo de la misma manera que lo haría con una unidad de red, pero apúntela a una carpeta en la máquina actual. Lo único que debe hacer especial es usar una ruta UNC para la carpeta local.
Aquí es una helper class
seguro de cómo hacer esto en C#, pero esto le ayudará a:
Acabo probado esto y funciona perfecto
En mi computadora, tienen 1 disco duro ideado en 2, C:
& D:
, yendo a D:
tengo una carpeta llamada Copia de seguridad, si hace clic derecho en la carpeta y hace clic en la pestaña Share
, verá Network Path
.. En mi pc se ve como \\Robert-home\backup
entonces procedió a CMD
y ejecutado el comando siguiente
NET USE Z: \\Robert-home\backup
bruja mapear el contenido de D:\backup
a Z:
Estoy seguro de que puede completar una tarea tan dentro de C# ..
Usualmente uso este método en el trabajo para la asistencia del cliente para transferir y hacer copias de seguridad de los archivos antes de que se les envíen nuevas consolas.
- 1. ¿Cómo obtener el número de serie de los discos duros?
- 2. Listar todos los discos duros en un sistema Linux
- 3. No se pueden compilar discos duros ffmpeg compatibles con i386 en Mac OS X
- 4. ¿Cómo obtener el número de serie de los discos duros de Mac?
- 5. Cómo convertir imágenes planas de discos en vmdk para virtuales o vmplayer?
- 6. ¿Cómo llamar a una lista de los discos duros conectados físicamente usando Free Pascal o, en su defecto, Delphi?
- 7. Discos dispersos en Haskell?
- 8. Git y enlaces duros
- 9. UIImageize con bordes duros
- 10. Número de discos de artistas
- 11. Discos de Python en sqlalchemy
- 12. Postgres distribuyendo datos a través de múltiples discos
- 13. Creación recíproca de enlaces duros con python
- 14. Se están creando puertos serie virtuales USB duplicados. ¿Qué podría causar esto?
- 15. máquinas virtuales
- 16. propiedades virtuales
- 17. C++: funciones virtuales privadas, frente a las funciones virtuales puras
- 18. ¿Por qué las funciones virtuales en C++ se llaman 'virtuales'?
- 19. Open Sin editar discos y obtener el tamaño OS X
- 20. Grande en la matriz de discos para numpy
- 21. Clases virtuales: hacerlo bien?
- 22. Evitar funciones virtuales
- 23. Java - Métodos virtuales
- 24. con funciones virtuales
- 25. métodos no virtuales Sustitución
- 26. Tablas de métodos virtuales
- 27. métodos virtuales puros C++
- 28. máquinas virtuales del futuro
- 29. Cómo comparar máquinas virtuales
- 30. encasillamiento con funciones virtuales
Al escribir un controlador de dispositivo. Algo que no puedes hacer con C#. – dtb
No es experto, pero parece que necesita trabajar a nivel de kernel con DDK. – LatinSuD
@dtv & LatinSuD, esto definitivamente no requiere la creación de un sistema de archivos virtual, puede asignar fácilmente un disco a las rutas locales. – mikerobi