如何将C:驱动器与所有驱动程序分开



我有这个程序,但是当我尝试访问第一个时,我有一个问题,如果...我需要分开驱动程序,并且只能获得C:的总大小。当程序停止时...说驱动器尚未准备就绪。我该怎么办?

class Program
{
    static void Main(string[] args)
    {
        string mainHD = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System));
        GetTotalFreeSpace(mainHD);
        DriveInfo[] drives = DriveInfo.GetDrives();
        foreach (DriveInfo drive in drives)
        {
            if (drive.VolumeLabel != @"C:")
            {
                //There are more attributes you can use.
                //Check the MSDN link for a complete example.
                string drivesname = drive.Name;
                Console.WriteLine(drivesname);
                if (drive.IsReady) Console.WriteLine(drive.TotalSize);
            }
        }
        Console.ReadLine();
    }
    private static long GetTotalFreeSpace(string driveName)
    {
        foreach (DriveInfo drive in DriveInfo.GetDrives())
        {
            if (drive.IsReady && drive.Name == driveName)
            {
                return drive.TotalSize;
            }
        }
        return -1;
    }
}
}

看来您应该在检查drive.VolumeLabel之前测试drive.IsReady

看一下MSDN样本。

尝试以下操作:

foreach (DriveInfo drive in drives)
{
    if (drive.IsReady && drive.VolumeLabel != @"C:")
    {
        //There are more attributes you can use.
        //Check the MSDN link for a complete example.
        string drivesname = drive.Name;
        Console.WriteLine(drivesname);
        Console.WriteLine(drive.TotalSize);
    }
}

虽然这可能是C:驱动器未准备就绪的问题,但也可能是有A:或B:软盘驱动器的情况,在这种情况下,继续检查IsReady直到准备就绪可能不是一个好主意。

问题不清楚。通过代码,这是旋转/等待可能是最佳选择的罕见情况之一。Drive.IsReady有两个呼叫可以从旋转/等待中受益。后者可以像...

一样完成
private static long GetTotalFreeSpace(string driveName)
    {
        foreach (DriveInfo drive in DriveInfo.GetDrives())
        {
            if(!Drive.IsReady)
                //spin wait implemented however you deem appropriate.  Maybe sleep a second or so
            if (drive.Name == driveName)
            {
                return drive.TotalSize;
            }
        }
        return -1;
    }

第二,根据MSDN:

iSready表示是否准备就绪驱动器。例如,它指示 CD是否在CD驱动器中,还是可移动的存储设备 准备读/写操作。如果您不测试驱动器是否是 准备就绪,还没有准备好,使用DriveInfo查询驱动器 提出ioException。

我建议您还添加一些逻辑来处理IOException

我似乎记得这是试图访问没有磁盘的'a:'的一个问题。即使您实际上没有驱动器,许多机器都会在那里报告。

相关内容

  • 没有找到相关文章

最新更新