Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建虚拟磁盘装载点_C#_.net_Ramdisk_Mount Point_Virtual Disk - Fatal编程技术网

C# 创建虚拟磁盘装载点

C# 创建虚拟磁盘装载点,c#,.net,ramdisk,mount-point,virtual-disk,C#,.net,Ramdisk,Mount Point,Virtual Disk,我已经使用ImDisk库和.NET包装器在我的C应用程序中创建了一个虚拟磁盘。但是,在创建设备之后,我显然还需要创建一个挂载点,以便设备实际显示为驱动器号。我不完全理解应该为它提供什么来创建挂载点,但我相信这更适用于虚拟设备而不是库 我的职能: public bool CreateRAMDisk() { // Create Empty RAM Disk char driveLetter = ImDiskAPI.FindFreeDriveLetter(); ImDiskA

我已经使用ImDisk库和.NET包装器在我的C应用程序中创建了一个虚拟磁盘。但是,在创建设备之后,我显然还需要创建一个挂载点,以便设备实际显示为驱动器号。我不完全理解应该为它提供什么来创建挂载点,但我相信这更适用于虚拟设备而不是库

我的职能:

public bool CreateRAMDisk()
{
    // Create Empty RAM Disk
    char driveLetter = ImDiskAPI.FindFreeDriveLetter();

    ImDiskAPI.CreateDevice(52428800, 0, 0, 0, 0, ImDiskFlags.DeviceTypeHD | ImDiskFlags.TypeVM, null, false, driveLetter.ToString(), ref deviceID, IntPtr.Zero);

    string mountPoint = driveLetter + @":\Device\ImDisk0";
    ImDiskAPI.CreateMountPoint(mountPoint, deviceID);

    // Format the Drive for NTFS
    if (FormatDrive(driveLetter.ToString(), "NTFS", true, 4096, "", false))
    {
public static bool FormatDrive(string driveLetter, string fileSystem, bool quickFormat, int clusterSize, string label, bool enableCompression)
{
    driveLetter = driveLetter + ":";

    if (driveLetter.Length != 2 || driveLetter[1] != ':'|| !char.IsLetter(driveLetter[0]))
    {
        return false;
    }

    //query and format given drive         
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"select * from Win32_Volume WHERE DriveLetter = '" + driveLetter + "'");

    foreach (ManagementObject vi in searcher.Get())
    {
        vi.InvokeMethod( "Format", new object[] {fileSystem, quickFormat, clusterSize, label, enableCompression} );
    }

    return true;
}
CreateMountPoint定义:

        public static void CreateMountPoint(string Directory, uint DeviceNumber);
        //
        // Summary:
        //     Creates a mount point for an ImDisk virtual disk on an empty subdirectory
        //     on an NTFS volume.
        //
        // Parameters:
        //   Directory:
        //     Path to an empty subdirectory on an NTFS volume
        //
        //   DeviceNumber:
        //     Device number of an existing ImDisk virtual disk
更新

格式化驱动功能:

public bool CreateRAMDisk()
{
    // Create Empty RAM Disk
    char driveLetter = ImDiskAPI.FindFreeDriveLetter();

    ImDiskAPI.CreateDevice(52428800, 0, 0, 0, 0, ImDiskFlags.DeviceTypeHD | ImDiskFlags.TypeVM, null, false, driveLetter.ToString(), ref deviceID, IntPtr.Zero);

    string mountPoint = driveLetter + @":\Device\ImDisk0";
    ImDiskAPI.CreateMountPoint(mountPoint, deviceID);

    // Format the Drive for NTFS
    if (FormatDrive(driveLetter.ToString(), "NTFS", true, 4096, "", false))
    {
public static bool FormatDrive(string driveLetter, string fileSystem, bool quickFormat, int clusterSize, string label, bool enableCompression)
{
    driveLetter = driveLetter + ":";

    if (driveLetter.Length != 2 || driveLetter[1] != ':'|| !char.IsLetter(driveLetter[0]))
    {
        return false;
    }

    //query and format given drive         
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"select * from Win32_Volume WHERE DriveLetter = '" + driveLetter + "'");

    foreach (ManagementObject vi in searcher.Get())
    {
        vi.InvokeMethod( "Format", new object[] {fileSystem, quickFormat, clusterSize, label, enableCompression} );
    }

    return true;
}

事实证明,他们的问题在于CreateDevice中传递的参数存在一些问题,这使得CreateDevice无法生成错误,但无法完全完成安装过程


谢谢你的帮助

您必须在driveLetter参数的末尾添加:FormatDrive到底在做什么?因为它似乎没有任何东西连接到创建的设备?我还认为,如果需要使用CreateMountPoint,应该这样调用:CreateMountPointC:\mount,deviceID;其中C:\mount是现有文件系统上的某个空目录。我用FormatDrive函数更新了我的初始帖子。它应该在设备创建后格式化驱动器。目前不工作,因为我的设备尚未连接到驱动器号。嗯,这似乎对装载点有效,但我的设备似乎仍然没有连接到计算机中的驱动器号。是否有其他与创建虚拟磁盘相关的东西我可能会丢失?那么,如果在没有CreateMountPoint的情况下运行代码会发生什么?你凭什么说你必须要有这个?在我看来,调用CreateDevice和FormatDrive就足够了。无论我是否使用CreateMountPoint,它都不会作为驱动器号显示在我的计算机中。我的控制台上显示DeviceID为5,可用驱动器号为E,但它实际上并没有显示为硬盘驱动器。FormatDrive函数不起作用,因为驱动器实际上没有出现。