创建虚拟硬盘

时间:2010-09-20 17:13:20

标签: c#

如何创建将其文件存储在物理硬盘上的虚拟硬盘(如Z :)(如C:\ Files)。

4 个答案:

答案 0 :(得分:46)

这是直接执行此操作的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');

答案 1 :(得分:10)

您可以使用subst命令。 使用System.Diagnostic.Process运行带有所需参数的subst.exe。

这是命令语法:

  

语法

     

将路径与驱动器号相关联。

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

drive1:指定虚拟驱动器   你想要分配一个路径。

     

[drive2:] path指定物理   要分配给的驱动器和路径   虚拟驱动器。

     

/ D删除a   替换(虚拟)驱动器。

     

键入没有参数的SUBST来显示a   当前虚拟驱动器列表。当前虚拟驱动器列表。

答案 2 :(得分:1)

以与映射网络驱动器完全相同的方式执行此操作,但将其指向当前计算机上的文件夹。您唯一需要做的就是使用本地文件夹的UNC路径。

这是helper class

答案 3 :(得分:-1)

不确定如何在C#中执行此操作,但这可以帮助您:

我刚测试了这个并且完美无缺

在我的计算机上有1个硬盘驱动器设计为2,C:& D:,进入D:我有一个名为Backup的文件夹,如果您右键单击该文件夹并单击Share选项卡,您将看到Network Path ..在我的电脑上看起来像\\Robert-home\backup

然后我继续CMD并执行以下命令

NET USE Z: \\Robert-home\backup

Witch已成功将D:\backup的内容映射到Z:

我相信你可以在C#中完成这样的任务。

我通常在工作时使用此方法来支持客户端在发送新控制台之前传输和备份文件。