Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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#_Winforms - Fatal编程技术网

C# 如何找到哪个硬盘在哪个分区上?

C# 如何找到哪个硬盘在哪个分区上?,c#,winforms,C#,Winforms,对于exmaple,我想删除磁盘C:上的分区C:在此C:上创建新分区,并格式化它并安装新窗口 我如何知道C:是在分区0上,还是在分区1或分区2上? 我想获得我所有硬盘的列表,并显示每个硬盘在哪个分区上,例如: label1.Text will show: C: Partition 0 label2.Text will show: D: Partition 1 我试过这个: string system_disk = Path.GetPathRoot(Environment.SystemDirec

对于exmaple,我想删除磁盘C:上的分区C:在此C:上创建新分区,并格式化它并安装新窗口

我如何知道C:是在分区0上,还是在分区1或分区2上? 我想获得我所有硬盘的列表,并显示每个硬盘在哪个分区上,例如:

label1.Text will show: C: Partition 0
label2.Text will show: D: Partition 1
我试过这个:

string system_disk = Path.GetPathRoot(Environment.SystemDirectory).TrimEnd('\\');
using (var m1 = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" + system_disk + "'} WHERE ResultClass=Win32_DiskPartition"))
{
    foreach (var i1 in m1.Get())
    {
        using (var m2 = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + i1["DeviceID"] + "'} WHERE ResultClass=Win32_DiskDrive"))
        {
            foreach (var i2 in m2.Get())
            {
                label1.Text = string.Format("Type: " + i2["MediaType"]);
                label2.Text = string.Format("Model: " + i2["Name"]);
                break;
            }
        }
        break;
    }
}

但这不是我需要的。

我不确定这是否是您想要的,但这可以提供输出[drive letter]-[partition]-[Disk],如您的示例所示。这段代码是我用来跟踪热插拔磁盘的,使用磁盘序列号。“results”变量包含标签中所需的内容

(using System.IO, System.Management, System.Linq, System.Collections.Generic...)

class HardDrive
{
    public string DiskIndex { get; set; }
    public string Model { get; set; }
    public string Type { get; set; }
    public string SerialNo { get; set; }
}

class Partition
{
    public string PartitionIndex { get; set; }
    public HardDrive HardDrive { get; set; }
}

class LogicalDrive
{
    public string Name { get; set; }
    public Partition Partition { get; set; }
}

// ... (class/method declaration etc)
var results = new List<LogicalDrive>();
var logicalDrives = DriveInfo.GetDrives().Where(x => x.IsReady);
var partitions = new Dictionary<string, Partition>();
var hardDrives = new Dictionary<string, HardDrive>();
var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

foreach (ManagementObject mo in searcher.Get())
{
    var hd = new HardDrive();
    hd.Model = mo["Model"].ToString();
    hd.Type = mo["InterfaceType"].ToString();
    hd.SerialNo = mo["SerialNumber"].ToString().Trim();
    hd.DiskIndex = mo["Index"].ToString().Trim();
    hardDrives.Add(hd.DiskIndex, hd);
}

foreach (var logicalDrive in logicalDrives)
{
    var res = new LogicalDrive { Name = logicalDrive.Name };
    results.Add(res);
    var driveName = logicalDrive.Name.Trim('\\');
    var queryString = String.Format("ASSOCIATORS OF {{Win32_LogicalDisk.DeviceID='{0}'}} WHERE ResultClass=Win32_DiskPartition", 
                driveName);
    searcher = new ManagementObjectSearcher(queryString);
    foreach (ManagementObject mo in searcher.Get())
    {
        var partitionIndex = mo["Index"].ToString().Trim();
        var diskIndex = mo["DiskIndex"].ToString().Trim();
        var key = partitionIndex + "-" + diskIndex;
        Partition p;
        if (!partitions.TryGetValue(key, out p))
        {
            p = new Partition
            {
                PartitionIndex = partitionIndex,
                HardDrive = hardDrives[diskIndex]
            };
            partitions.Add(key, p);
        }
        res.Partition = p;
    }
}
(使用System.IO、System.Management、System.Linq、System.Collections.Generic…)
类硬盘驱动器
{
公共字符串DiskIndex{get;set;}
公共字符串模型{get;set;}
公共字符串类型{get;set;}
公共字符串SerialNo{get;set;}
}
类划分
{
公共字符串PartitionIndex{get;set;}
公共硬盘{get;set;}
}
类逻辑驱动
{
公共字符串名称{get;set;}
公共分区{get;set;}
}
// ... (类/方法声明等)
var results=新列表();
var logicalDrives=DriveInfo.GetDrives(),其中(x=>x.IsReady);
var partitions=newdictionary();
var hardDrives=新字典();
var searcher=新的ManagementObjectSearcher(“从Win32_DiskDrive中选择*);
foreach(searcher.Get()中的ManagementObject mo)
{
var hd=新硬盘驱动器();
hd.Model=mo[“Model”].ToString();
hd.Type=mo[“InterfaceType”].ToString();
hd.SerialNo=mo[“SerialNumber”].ToString().Trim();
hd.diskdex=mo[“Index”].ToString().Trim();
添加(hd.diskdex,hd);
}
foreach(逻辑驱动中的var逻辑驱动)
{
var res=new LogicalDrive{Name=LogicalDrive.Name};
结果:添加(res);
var driveName=logicalDrive.Name.Trim('\\');
var queryString=String.Format(“其中ResultClass=Win32\u LogicalDisk.DeviceID='{0}}}的关联程序”,
司机姓名);
searcher=新的ManagementObjectSearcher(queryString);
foreach(searcher.Get()中的ManagementObject mo)
{
var partitionIndex=mo[“Index”].ToString().Trim();
var diskIndex=mo[“diskIndex”].ToString().Trim();
var键=分区索引+“-”+磁盘索引;
分区p;
if(!partitions.TryGetValue(key,out p))
{
p=新分区
{
PartitionIndex=PartitionIndex,
硬盘驱动器=硬盘驱动器[diskIndex]
};
添加(key,p);
}
res.分区=p;
}
}

请注意,对于网络驱动器,
LogicalDrive.Partition
将为空。

此代码提供了什么结果?如果他没有响应,我将假设他删除了错误的分区。Robert在label1中获得:Foxed硬盘介质,在label2中获得:\\PHYSICALDRIVER0