Wie kann ich eine virtuelle Festplatte (wie Z :) erstellen, die ihre Dateien auf einer physischen Festplatte speichert (wie C: \ Files).Erstellen einer virtuellen Festplatte
Antwort
Hier ist C# -Code dies direkt zu tun:
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);
}
Verwendungsbeispiel:
Subst.MapDrive('z', @"c:\temp");
Console.WriteLine(Subst.GetDriveMapping('z'));
Subst.UnmapDrive('z');
funktioniert das in Windows 10? kann es nicht funktionieren – Kubi
Wenn der Benutzer den Laufwerksbuchstaben einer Festplatte eingibt, wird 'sb' etwas wie' \ Device \ HarddiskVolume2' enthalten und der 'Substring (4)' wird im Grunde Müll ausgeben. Ich würde vorschlagen, sicherzustellen, dass 'sb' mit' @ "\ ?? \" 'beginnt, bevor der' Substring (4) 'zurückgegeben wird. Wenn es mit etwas anderem beginnt, erscheint '' '' (dasselbe, das Sie zurückgeben, wenn das Laufwerk überhaupt nicht existiert), scheint ein vernünftiger Wert zu sein - es gibt kein SUBSTed-Laufwerk, um den Pfad zu erhalten. –
@Hans Passant: Der obige Code zeigt keine Wirkung, wenn die Anwendung unter Admin-Berechtigungen ausgeführt wird. Dh 'Run As Admin' hat es in Windows 8 und Windows 10 auch versucht, jedoch ohne Admin-Berechtigungen zeigt der Code die erwarteten Ergebnisse an, eine Frage zum Thema hier gestellt, zu schätzen, wenn Sie einen Blick auf https: // stackoverflow werfen .com/q/46663368/323339 –
Sie können den Befehl subst verwenden. Verwenden Sie System.Diagnostic.Process, um die Datei subst.exe mit den gewünschten Parametern auszuführen. Hier
ist die Befehlssyntax:
Syntax
Associates ein Pfad mit einem Laufwerksbuchstaben.
SUBST [drive1: [drive2:]path] SUBST drive1: /D
Laufwerk1: ein virtuelles Laufwerk auf , die Sie einen Pfad zuweisen möchten.
[Laufwerk2:] Pfad Gibt ein physisches Laufwerk und Pfad an, den Sie einem virtuellen Laufwerk zuweisen möchten.
/D Löscht ein substituiertes (virtuelles) Laufwerk.
Geben Sie SUBST ohne Parameter ein, um eine Liste der aktuellen virtuellen drives.list der aktuellen virtuellen Laufwerke anzuzeigen.
Nur damit Sie wissen, dies ist vielleicht eine der einfachsten Methoden. Wenn Sie den Computer neu starten, wird jedoch die Bereitstellung zurückgesetzt und das virtuelle Laufwerk entfernt und alles wieder normalisiert. Wenn Sie den Eintrag zur Datei autoexec.bat hinzufügen, kann das virtuelle Laufwerk während des Neustarts beibehalten werden. –
@Ranhiru, Sie haben Recht, das virtuelle Laufwerk wird bei jedem Start zurückgesetzt. Eine einfache Lösung ist, dass das Programm den Befehl subst an jedem Startpunkt aufruft. –
In Windows 7/64, was ist der beste Weg, um eine dauerhafte "subst" zu machen, die von allen Prozessen gesehen werden? – supercat
Tun Sie das genauso, wie Sie ein Netzlaufwerk zuordnen würden, aber zeigen Sie es auf einen Ordner auf dem aktuellen Computer. Sie müssen nur einen UNC-Pfad für den lokalen Ordner angeben.
Hier ist ein helper class
nicht sicher, wie dies in C# zu tun, aber das sollte Ihnen helfen:
Ive dies nur getestet und funktioniert perfekt
Auf meinem Computer hat 1 Festplatte entwickelt, in 2, C:
& D:
, in D:
gehen, ich habe einen Ordner-Backup, wenn Sie einen Rechtsklick auf den Ordner und klicken Sie auf die Share
Tab genannt, werden Sie Network Path
.. Auf meinem PC sehen, es sieht aus wie \\Robert-home\backup
Ich fuhr dann fort zu CMD
und ausgeführt, um den folgenden Befehl
NET USE Z: \\Robert-home\backup
Witch Karte erfolgreich den Inhalt D:\backup
zu Z:
Ich bin sicher, Sie eine solche Aufgabe in C# abschließen können ..
Normalerweise verwende ich diese Methode bei der Arbeit für die Client-Unterstützung, um Dateien zu übertragen und zu sichern, bevor neue Konsolen an sie ausgegeben werden.
- 1. Erstellen einer virtuellen Kamera für OS X
- 2. Erstellen eines virtuellen Monitors/virtuellen Anzeigegeräts
- 3. Erstellen von "virtuellen" ScrollableControl?
- 4. Vagrant - stellen Sie den Speicherort der virtuellen Festplatte für VirtualBox
- 5. Erstellen eines virtuellen Windows-Laufwerks
- 6. Erstellen virtuellen Dateipfad aus dem Strom
- 7. Unterschied zwischen einer virtuellen Funktion und einer rein virtuellen Funktion
- 8. Erstellen einer Klasse Zusammenfassung ohne irgendwelche virtuellen Methoden
- 9. Simulieren einer Iscsi-Festplatte in einem Laptop (Lernen für VCP)
- 10. Flash Video - Erstellen eines virtuellen Videoclips
- 11. Erstellen eines virtuellen Monitors (das Anzeigegerät)
- 12. Überschreiben einer virtuellen Funktion [[noremore]]
- 13. Ideen für den Aufbau einer virtuellen Konferenz
- 14. Wie lokales Git Repo von einer Festplatte zu einer anderen Festplatte zu bewegen?
- 15. Überladen einer C++ Template-Klasse virtuellen Funktion
- 16. Get Gesamtgröße einer Festplatte in C++ Windows
- 17. Abrufen der Clustergröße einer Festplatte (über Code)
- 18. Wie kann ich ändern, wo Vagrant nach seiner virtuellen Festplatte sucht?
- 19. Persistente Festplatte Größe reduzieren
- 20. Programmgesteuertes Erstellen eines virtuellen Verzeichnisses im Root der Website
- 21. Erstellen eines virtuellen Webcam-Geräts für OS X
- 22. Verwendung von virtuellen Schlüsselwort mit einer Klassendeklaration
- 23. Umfrage: Build Server in einer virtuellen Maschine?
- 24. C++ - Parameter einer rein virtuellen Funktion
- 25. Läuft Golang auf einer virtuellen Maschine?
- 26. Software-Deployment in einer virtuellen Umgebung
- 27. Abfrage auf einer virtuellen Eigenschaft in Mungo
- 28. Aufruf des überladenen Konstruktors einer virtuellen Basisklasse
- 29. abstrakte Methode in einer virtuellen Klasse
durch einen Gerätetreiber zu schreiben. Etwas, was du nicht mit C# machen kannst. – dtb
Kein Experte, aber es sieht so aus, als müssten Sie mit DDK auf Kernel-Ebene arbeiten. – LatinSuD
@dtv & LatinSuD, dies erfordert definitiv kein virtuelles Dateisystem zu erstellen, können Sie einfach ein Laufwerk auf lokale Pfade zuordnen. – mikerobi