Как создать виртуальный жесткий диск (например, Z :), который хранит его файлы на физическом жестком диске (например, C: \ Files).создание виртуального жесткого диска
ответ
Здесь C# код, чтобы сделать это непосредственно: использование
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);
}
Пример:
Subst.MapDrive('z', @"c:\temp");
Console.WriteLine(Subst.GetDriveMapping('z'));
Subst.UnmapDrive('z');
работает в Windows 10? не может заставить его работать – Kubi
Если пользователь передает букву диска на жестком диске, 'sb' будет содержать что-то вроде' \ Device \ HarddiskVolume2', а 'Substring (4)' будет в основном возвращать мусор. Я бы посоветовал убедиться, что 'sb' начинается с' @ "\ ?? \" 'перед возвратом' Substring (4) '. Если он начинается с чего-то другого, '' '' (то же самое, что вы возвращаете, если диск вообще не существует) кажется разумным значением для возврата - нет никакого диска SUBSTed, чтобы получить путь. –
@Hans Passant: указанный выше код не будет отображаться при запуске приложения под правами администратора. то есть «Run As Admin» также попробовал его в Windows 8 и Windows 10, но без прав администратора он будет показывать ожидаемые результаты, вопрос, связанный с объектом здесь, оценивает, если вы посмотрите https: // stackoverflow .com/д/46663368/323339 –
Вы можете использовать команду subst. Используйте System.Diagnostic.Process для запуска subst.exe с требуемыми параметрами.
Вот синтаксис команды:
Синтаксис
Связывает путь с буквой диска.
SUBST [drive1: [drive2:]path] SUBST drive1: /D
drive1: Определяет виртуальный диск к который вы хотите назначить путь.
[drive2:] path Указывает физический привод и путь , который вы хотите назначить виртуальному диску .
/D Удаляет замененный (виртуальный) диск.
Введите SUBST без параметров, чтобы отобразить список текущих виртуальных дисков.list текущих виртуальных дисков .
Просто, чтобы вы знали, возможно, это самые простые методы. Однако перезагрузка компьютера вернет mount и удалит виртуальный диск и вернет все в норму. Если вы добавите запись в файл autoexec.bat, виртуальный диск можно сохранить во время перезапуска. –
@ Ranhiru, вы правы, виртуальный диск будет возвращен при каждой загрузке. Легкое решение состоит в том, что программа будет вызывать команду subst при каждом запуске. –
В Windows 7/64, что лучший способ сделать постоянный «суб», который будет отображаться всеми процессами? – supercat
Сделайте это точно так же, как и на карте сетевого диска, но укажите его в папку на текущей машине. Единственное, что вам нужно сделать, это использовать UNC-путь для локальной папки.
Вот helper class
Не знаю, как сделать это в C#, но это должно помочь вам:
Ive просто проверил это и работает отлично
На моем компьютере есть один жесткий диск разработаны в 2, C:
D:
, переходя в D:
У меня есть папка под названием «Резервное копирование», если вы щелкните правой кнопкой мыши по папке и щелкните вкладку Share
, вы увидите Network Path
.. На моем компьютере это выглядит как \\Robert-home\backup
Затем я приступил к CMD
и выполнил следующую команду
NET USE Z: \\Robert-home\backup
Witch успешно отображения содержимого D:\backup
в Z:
Я уверен, что вы можете выполнить такую задачу в C# ..
Обычно я использую этот метод для поддержки клиентов для передачи и резервного копирования файлов до того, как им выдадут новые консоли.
- 1. Дефрагментация виртуального жесткого диска (.vhd)?
- 2. Эмуляция виртуального жесткого диска с использованием Cocoa
- 3. Ошибка в спецификации формата виртуального жесткого диска?
- 4. Создание виртуального диска в C#
- 5. Создание резервной копии поврежденного жесткого диска OSX
- 6. Vagrant - установить местоположение виртуального жесткого диска для VirtualBox
- 7. Как найти номер раздела виртуального жесткого диска через скрипт?
- 8. Как избежать жесткого диска
- 9. Значок жесткого диска Android
- 10. Копирование внешнего жесткого диска
- 11. Принцип работы жесткого диска
- 12. выключение жесткого диска
- 13. Обозначение жесткого диска BSD
- 14. Мембранный эквивалент жесткого диска
- 15. Расчет Емкость жесткого диска
- 16. Уникальный идентификатор жесткого диска
- 17. производительность жесткого диска
- 18. Расположение жесткого жесткого диска на UIImageView
- 19. Каков принцип динамического жесткого диска VirtualBox?
- 20. Создание виртуального раздела
- 21. Ускорение создания виртуального виртуального диска с помощью numpy и pandas
- 22. адрес жесткого диска при разборке
- 23. css изображение с жесткого диска
- 24. загрузочный сектор чтения жесткого диска
- 25. Как избежать фрагментации жесткого диска?
- 26. Программная идентификация сбоя жесткого диска
- 27. Идентификатор жесткого диска SATA-накопителей
- 28. Формат жесткого диска с javascript
- 29. FInding емкость жесткого диска программно
- 30. Понимание размера сектора жесткого диска
При написании драйвера устройства. Что-то, что вы не можете сделать с C#. – dtb
Не эксперт, но похоже, что вам нужно работать на уровне ядра с помощью DDK. – LatinSuD
@dtv & LatinSuD, это определенно не требует создания виртуальной файловой системы, вы можете легко сопоставить диск с локальными путями. – mikerobi