Подтвердить что ты не робот

Создание виртуального жесткого диска

как я могу создать виртуальный жесткий диск (например, Z:), который хранит его на физическом жестком диске (например, C:\Files).

4b9b3361

Ответ 1

Вот код С#, чтобы сделать это напрямую:

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

Ответ 2

Вы можете использовать команду subst. Используйте System.Diagnostic.Process для запуска subst.exe с требуемыми параметрами.

Вот синтаксис команды:

Синтаксис

Связывает путь с буквой диска.

SUBST [drive1: [drive2:]path] 
SUBST drive1: /D

drive1: указывает виртуальный диск на который вы хотите назначить.

[drive2:] path Указывает физическое диск и путь, который вы хотите назначить виртуальный диск.

/D Удаляет замененный (виртуальный) диск.

Введите SUBST без параметров для отображения список текущих виртуальных дисков .list текущих виртуальных дисков.

Ответ 3

Сделайте это так же, как и на карте сетевого диска, но укажите его на папку на текущем компьютере. Единственное, что вам нужно сделать, это использовать UNC-путь для локальной папки.

Вот вспомогательный класс

Ответ 4

Не уверен, как это сделать на С#, но это должно вам помочь:

Ive просто проверил это и отлично работает

На моем компьютере есть 1 жесткий диск, разработанный в 2, C: и D:, идя в D:, у меня есть папка под названием "Резервное копирование", если вы щелкните правой кнопкой мыши по папке и нажмите вкладку Share, вы см. Network Path.. На моем компьютере это выглядит как \\Robert-home\backup

Затем я перешел к CMD и выполнил следующую команду

NET USE Z: \\Robert-home\backup

Ведьма успешно отображает содержимое D:\backup на Z:

Я уверен, что вы можете выполнить такую ​​задачу в С#..

Обычно я использую этот метод для поддержки клиентов для передачи и резервного копирования файлов до того, как им будут выпущены новые консоли.