Come posso creare Virtual Hard Drive (come Z :) che memorizza i suoi file sul disco rigido fisico (come C: \ Files).creazione di un disco rigido virtuale
risposta
Ecco codice C# per fare questo direttamente: l'utilizzo
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);
}
Esempio:
Subst.MapDrive('z', @"c:\temp");
Console.WriteLine(Subst.GetDriveMapping('z'));
Subst.UnmapDrive('z');
funziona in Windows 10? impossibile farlo funzionare – Kubi
Se l'utente passa la lettera di unità di un disco rigido, 'sb' conterrà qualcosa come' \ Device \ HarddiskVolume2' e 'Substring (4)' fondamentalmente restituirà garbage. Suggerirei di fare in modo che 'sb' inizi con' @ "\ ?? \" 'prima di restituire' Substring (4) '. Se inizia con qualcos'altro, '" "' (la stessa cosa che si restituisce se l'unità non esiste affatto) sembra un valore ragionevole da restituire - non esiste un'unità SUBSTed per ottenere il percorso di. –
@Hans Passant: il codice precedente non mostrerà alcun effetto quando l'applicazione viene eseguita con le autorizzazioni di amministratore. Ad esempio, "Esegui come amministratore" lo ha provato anche in Windows 8 e Windows 10, tuttavia, senza i permessi di amministratore, il codice mostrerà i risultati previsti, una domanda postata relativa all'argomento qui, apprezza se dai uno sguardo a https: // StackOverflow com/q/46663368/323339 –
È possibile utilizzare il comando subst. Utilizzare System.Diagnostic.Process per eseguire il file subst.exe con i parametri desiderati.
Ecco la sintassi del comando:
Sintassi
Associa un percorso con una lettera di unità.
SUBST [drive1: [drive2:]path] SUBST drive1: /D
unità1: Specifica un'unità virtuale per quale si desidera assegnare un percorso.
Percorso [unità2:] Specifica un'unità fisica e il percorso che si desidera assegnare a un'unità virtuale .
/D Elimina un'unità (virtuale) sostituita.
Digitare SUBST senza parametri per visualizzare un elenco virtuale di drive.list correnti di unità virtuali attuali.
Solo per quello che sai, forse è uno dei metodi più facili. Tuttavia, il riavvio del computer ripristinerà il montaggio e rimuoverà l'unità virtuale e rimetterà tutto alla normalità. Se si aggiunge la voce al file autoexec.bat, l'unità virtuale può essere mantenuta durante i riavvii. –
@Ranhiru, hai ragione, l'unità virtuale verrà ripristinata ad ogni avvio. Una soluzione semplice è che il programma chiamerà il comando subst ogni volta che si avvia. –
In Windows 7/64, qual è il modo migliore per eseguire una "subst" permanente che verrà visualizzata da tutti i processi? – supercat
Esegui esattamente come mappare un'unità di rete, ma indirizzarla a una cartella sulla macchina corrente. L'unica cosa che devi fare è usare un percorso UNC per la cartella locale.
Ecco un helper class
sicuro di come fare questo in C#, ma questo dovrebbe aiutare a:
Ive ha appena testato questa e funziona perfettamente
Sul mio computer hanno 1 disco rigido messo a punto in 2, C:
& D:
, entrando in D:
ho una cartella denominata Backup, se si fa clic destro sulla cartella e si fa clic sulla scheda Share
, vedrete Network Path
.. Sul mio pc sembra \\Robert-home\backup
ho poi proceduto a CMD
e giustiziati il seguente comando
NET USE Z: \\Robert-home\backup
Strega associare correttamente i contenuti di D:\backup
a Z:
Sono sicuro che è possibile completare un tale compito all'interno di C# ..
Di solito utilizzo questo metodo al lavoro per il supporto client per trasferire e fare il backup dei file prima che vengano rilasciate nuove console.
- 1. Disco rigido Heap Java
- 2. Vagrant - impostare la posizione del disco rigido virtuale per VirtualBox
- 3. Ottieni numero di serie disco rigido
- 4. Archiviazione di macchine virtuali VMware su disco rigido esterno
- 5. Secondo disco rigido per MongoDB utilizzando directoryperdb
- 6. Dove si trova Xcode sul disco rigido?
- 7. Posizione dell'SDK per iPhone sul disco rigido
- 8. Aprire un file diretto sul disco rigido da firefox (file: ///)
- 9. Un comportamento non definito può cancellare il disco rigido?
- 10. Ha senso partizionare un disco rigido del server dedicato?
- 11. Come posso archiviare un oggetto sul mio disco rigido?
- 12. Dimensione disco rigido di piccole dimensioni di Windows Azure
- 13. Creazione di un monitor virtuale/dispositivo di visualizzazione virtuale
- 14. GAC è un'area di memoria o un'area del disco rigido?
- 15. Come ridurre la dimensione sdk di Android sul disco rigido
- 16. Creazione di un dispositivo USB virtuale
- 17. Ottieni la temperatura del disco rigido usando Python
- 18. Salvare le immagini sul disco rigido SENZA richiesta?
- 19. Riproduci file video (disco rigido) locale con tag video HTML5?
- 20. Dimensioni DLL in memoria e dimensioni sul disco rigido
- 21. È possibile accedere al disco rigido direttamente da GPU?
- 22. Salvataggio dell'immagine canvas html 5 su disco rigido locale
- 23. Leggere i settori del disco rigido in C++ su Linux
- 24. Lettura di un file da un disco rigido nel simulatore iPhone
- 25. conoscere su quale posto su un disco rigido di un programma/file viene installato
- 26. Un disco rigido ibrido migliorerà i tempi di compilazione di Visual Studio?
- 27. È possibile leggere la potenza magnetica di un singolo bit sul disco rigido tramite software?
- 28. Spostamento di registri binari in MySQL su un altro disco rigido
- 29. Ottenere le dimensioni del cluster di un disco rigido (tramite codice)
- 30. Ottieni la dimensione totale di un disco rigido in C++ windows
Scrivendo un driver di periferica. Qualcosa che non puoi fare con C#. – dtb
Non esperto ma sembra che tu debba lavorare a livello del kernel con DDK. – LatinSuD
@dtv & LatinSuD, questo sicuramente non richiede la creazione di un file system virtuale, è possibile mappare facilmente un'unità ai percorsi locali. – mikerobi